我使用以下模式[%file:%line] %msg%n
将文件+编号输出到我的日志。
我也使用一个简单的包装类,我称之为L.java
。现在将[L.java:74] Message...
输出到我的日志是没有意义的。相反,我想输出调用文件名和行号...
log4j是否可以以某种方式实现?
答案 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。