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