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
我已經公地logging.jar和log4j的類路徑,1.2.16.jar。記錄儀是剛剛發佈,這是預期的行爲org.apache.commons.logging.Log
更新的
一個實例,引起Logger
記錄的代碼,其中被調用日誌方法的線。所以它應該做某種方式的另一種方式
>>原因記錄器記錄該代碼,其中日誌方法被調用<<的線。 。 。 這取決於你的log4j.properties的配置 - 你也可以輸出的記錄器的名稱,而不是(這應該是「A」) – cljk
沒錯。但是,登錄代碼行也不錯。由於log4j的調用Thread.currentThread()。的getStackTrace()......讓在運行時的行號,我不能在這種情況下使用這種方法 – user12384512