14

log4j で問題が発生していConsoleAppenderます:

次のように初期化すると:

ConsoleAppender ca = new ConsoleAppender();
ca.setLayout(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN));

エラーが発生し、ログが中断されます。

エラー出力:

log4j:ERROR [null] という名前のアペンダーに出力ストリームまたはファイルが設定されていません。

このように初期化すると、正常に動作します。

ConsoleAppender ca = new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN));

誰もこの問題を経験しましたか? Bugzilla レポジトリで見つけられませんが、実際に問題であるとすれば、それは明らかです!

おそらく私は間違った場所を探していますか?

関連コード:

import org.apache.log4j.*;

public class ConsoleAppenderIssue {
private static Logger logger = Logger.getLogger(ConsoleAppenderIssue.class);

public static void main(String [] args) {
    ConsoleAppender ca = new ConsoleAppender();
    ca.setLayout(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN));

    logger.addAppender(ca);

    logger.info("log something");

}

}
4

1 に答える 1

22

ConsoleAppenderのソースを見ると、これが発生している理由がわかります。

  public ConsoleAppender(Layout layout) {
    this(layout, SYSTEM_OUT);
  }

  public ConsoleAppender(Layout layout, String target) {
    setLayout(layout);
    setTarget(target);
    activateOptions();
  }

ConsoleAppender(Layout)これがターゲットとして通過し、レイアウトとターゲットを設定した後 SYSTEM_OUTに呼び出されることがわかります。activateOptions

自分で使用する場合setLayoutは、ターゲットを明示的に設定してを呼び出す必要もありますactivateOptions

于 2011-05-30T10:18:06.413 に答える