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");
}
}
SessionLogger ではなく、ログ メッセージにクラス A が表示されることを期待します。
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 メソッドが呼び出されたコード行がログに記録されます。だからどうにかして別の方法でやるべきだ