0

古いロガーをlog4jのものに置き換える予定です。Logger を直接使用する代わりに、Logger を継承した新しいクラス LocalLogger を作成する必要があります。そうする理由 - 古いロガーで利用可能だった新しいロギング メソッド名が必要です。

私はlog4jロガーを持っています:

protected final Logger logger = Logger.getLogger(getClass());

ロガーと同じ方法で LocalLogger を作成できる関数を作成する方法は?

クラスcをスーパーLocalLoggerに渡す方法は?

LocalLogger のドラフト:

public class LocalLogger extends Logger{

    protected LocalLogger(String name) {
        super(name);
    }

    public LocalLogger getLocalLogger(Class c)
    {
        return new LocalLoger(???)
    }

}
4

1 に答える 1

1

この場合、延長しないことをお勧めしLoggerます。代わりに、委任パターンを使用してください。

必要なメソッドを使用してまったく新しいクラスを作成しますが、ロギング呼び出しを の内部インスタンスに委譲しますLogger

public class LocalLogger {

  private final Logger logger;

  public LocalLogger(String name) {
    logger = Logger.getLogger(name);
  }

  public LocalLogger(@SuppressWarnings("rawtypes") Class clazz) {
    logger = Logger.getLogger(clazz);
  }

  public void antiqueLoggingMethod(String msg) {
    logger.info(msg);
  }

  // etc.
}
于 2013-08-09T14:15:25.547 に答える