有没有办法编写L.e(...)而不是Logger.getLogger(getClass())。error(...)?
// A foolish simple implementation
public class L {
public static void e(String msg) {
Logger.getLogger(L.class).error(msg);
}
}
要处理的主要问题是过滤和行号。如果有人在log4j配置文件中添加了一个过滤器,那么应该应用相同的方法,就像我从原始类调用了Logger.getLogger(getClass())方法一样。这意味着传入的类对象需要从堆栈跟踪中拉出。我认为这是可行的。我会做“new Throwable()”然后调用fillStackTrace,然后导航它以获取有关调用方法的信息。
其次,如果不直接修改Log4j代码也可能难以处理,记录器输出的行号应该是调用L.e(msg)的方法的行号,而不是该方法中的行号。
有关解决这些问题的任何建议吗?
答案 0 :(得分:0)
你可以做这样的事情
public class L {
public static void e(Class<?> clazz, Exception e) {
Logger.getLogger(clazz).log(Level.ERROR, "AN exception" , e);
}
}
然后,您可以致电L.e(this.getClass(), e);
以查找错误。
答案 1 :(得分:0)
我不清楚,但我认为您希望将Throwable.setStackTrace()与堆栈一起使用。