log4j =>添加调用者文件和行号以进行记录

时间:2015-06-24 06:20:52

标签: java android log4j

我使用以下模式[%file:%line] %msg%n将文件+编号输出到我的日志。

我也使用一个简单的包装类,我称之为L.java。现在将[L.java:74] Message...输出到我的日志是没有意义的。相反,我想输出调用文件名和行号...

log4j是否可以以某种方式实现?

1 个答案:

答案 0 :(得分:0)

在log4j 1.x和2.x之间,PatternLayout略有不同,我不知道您使用的是哪个版本,但我认为您无法在两个版本中通过配置实现此目的。

你可以通过编程实现(但这会影响你的性能),我认为在你的L.java方法中你必须使用如下方法:

private Logger logger = getYourLoggerAsYouAreCurrentlyDoing();
public enum LogLevel { INFO,DEBUG, ERROR, ETC }

void log(String msg, LogLevel level) {

    StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
    String callerClass = stackTraceElements[1].getClassName();
    String callerLine = "" + stackTraceElements[1].getLineNumber();
    String msg = callerClass + ":" + callerLine + "-" + msg;
    switch(LogLevel) {
        case INFO: logger.info(msg); break;
        case DEBUG: logger.debug(msg); break;
        //etc.
    }
}

如果是另一个带有Throwable参数的方法来记录stacktraces。