有没有办法编写L.e(...)而不是Logger.getLogger(getClass())。error(...)?

时间:2011-07-12 19:39:49

标签: logging log4j

有没有办法编写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)的方法的行号,而不是该方法中的行号。

有关解决这些问题的任何建议吗?

2 个答案:

答案 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()与堆栈一起使用。