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 回答