0
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 メソッドが呼び出されたコード行がログに記録されます。だからどうにかして別の方法でやるべきだ

4

2 に答える 2