public class SessionLogger {
private final String sessionId;
public SessionLogger(String sessionId) {
this.sessionId = sessionId;
}
public void info(Log log, String message, Object... args) {
log.info(formatMessage(message, args));
}
public void error(Log log, String message, Throwable t, Object... args) {
log.error(formatMessage(message, args), t);
}
private String formatMessage(String message, Object... args) {
for (int i = 0; i < args.length; i++) {
message = message.replaceFirst("\\{\\}", args[i].toString());
}
return String.format("SessionId [%s]: %s", sessionId, message);
}
}
我想要做的是将 Logger 实例传递给 SessionLogger 类,我想查看初始化 Logger 的类名。
public class A {
private static final Log log = LogFactory.getLog(A.class)
public void doIt() {
sessionLogger.info(log, "hello world");
}
}
我希望在日志消息中看到 A 类而不是 SessionLogger:
2013-10-07 00:29:27,328 INFO [main] (SessionLogger.java:17) - SessionId [123]: Hello world
我在类路径中有 commons-logging.jar 和 log4j-1.2.16.jar。Logger 是 org.apache.commons.logging.Log 的一个实例
更新
刚刚发布它是预期的行为,导致Logger
记录调用 log 方法的代码行。所以它应该以某种方式完成