如果包装Log4j,如何让它打印呼叫位置的行号

时间:2017-01-09 21:47:22

标签: java logging log4j

Log4j巧妙地提取日志打印的行号,最有可能是通过使用Throwable来获取行号,通过查看它的StackTrace。

Alas Logger不是Log4j中的接口,因此不能仅使用调试,信息,错误等方法对其进行另一个实现,然后可以根据平台的需要切换实现。

所以如果创建一个包装器,即:

class Parent {
    static final Logger log = Logger.getLogger(Parent.class);

    static void debugLog(String str) {
        log.debug(str);
    }
    static void debugLog(String str, Throwable t) {
        log.debug(str, t);
    }
}

如何让它将调用debugLog()的行号放入log4j记录器中,以便按照自己的意愿工作。或者这只是Log4j中一个可怕的设计缺陷。

1 个答案:

答案 0 :(得分:0)

您必须自己计算位置并构建LocationInfo。 然后,您必须创建LoggingEvent并调用callAppenders方法。