Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 是否有一种方法可以编写L.e(…)而不是Logger.getLogger(getClass()).error(…)?_Logging_Log4j - Fatal编程技术网

Logging 是否有一种方法可以编写L.e(…)而不是Logger.getLogger(getClass()).error(…)?

Logging 是否有一种方法可以编写L.e(…)而不是Logger.getLogger(getClass()).error(…)?,logging,log4j,Logging,Log4j,是否有一种方法可以编写L.e(…)而不是Logger.getLogger(getClass()).error(…) 要处理的主要问题是过滤和行号。如果有人向log4j配置文件添加了一个过滤器,那么它应该应用与我从原始类调用Logger.getLogger(getClass())方法相同的方法。这意味着传入的类对象需要从堆栈跟踪中提取。我认为这是可行的。我只需执行“new Throwable()”,然后调用fillStackTrace,然后导航它以获取有关调用方法的信息 其次,如果不直接修改Log

是否有一种方法可以编写L.e(…)而不是Logger.getLogger(getClass()).error(…)

要处理的主要问题是过滤和行号。如果有人向log4j配置文件添加了一个过滤器,那么它应该应用与我从原始类调用Logger.getLogger(getClass())方法相同的方法。这意味着传入的类对象需要从堆栈跟踪中提取。我认为这是可行的。我只需执行“new Throwable()”,然后调用fillStackTrace,然后导航它以获取有关调用方法的信息

其次,如果不直接修改Log4j代码,可能很难处理,记录器输出的行号应该是调用L.e(msg)的方法的行号,而不是该方法内部的行号


有没有解决这些问题的建议?

你可以这样做

public class L {

     public static void e(Class<?> clazz, Exception e) {
          Logger.getLogger(clazz).log(Level.ERROR, "AN exception" , e);
      }
}
公共类L{
公共静态无效e(类别类别类别,例外e){
Logger.getLogger(clazz).log(Level.ERROR,“异常”,e);
}
}

然后可以调用
L.e(this.getClass(),e)错误。

我不清楚,但我认为您希望在堆栈中使用Throwable.setStackTrace()。

一个小调整:“this.class”不是Java,填写当前类名有点麻烦。。。所以也要提供
publicstaticvoidethis(对象o,异常e){Logger.getLogger(o.getClass())…
public class L {

     public static void e(Class<?> clazz, Exception e) {
          Logger.getLogger(clazz).log(Level.ERROR, "AN exception" , e);
      }
}