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



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

唉,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 中的一个可怕的设计缺陷。

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

最新更新