如何在代码中创建新的log4j ConsoleAppender而不是config?

时间:2009-09-07 13:43:17

标签: java log4j

我想以编程方式创建一个新的log4j ConsoleAppender并将其作为一个appender添加到记录器 - 我如何正确地实例化一个 - 使用以下似乎使log4j抱怨 - 我需要使用什么setter来配置它正常?

// log4j complains of "No output stream or file set for the appender named [null]."
logger.addAppender(new ConsoleAppender());

据推测,这是一个知道在ConsoleAppender上设置什么但是我无法弄明白的情况。我假设有一些获得默认布局的方法。我只想要一个附加到SysOut的标准ConsoleAppender。感谢任何指导,谢谢。

2 个答案:

答案 0 :(得分:28)

您需要在appender上设置Writer(然后还要设置Layout以避免您看到的下一个错误。)这意味着您无法使用匿名实例,因为您需要使用setter来配置appender。 e.g。

ConsoleAppender ca = new ConsoleAppender();
ca.setWriter(new OutputStreamWriter(System.out));
ca.setLayout(new PatternLayout("%-5p [%t]: %m%n"));
logger.addAppender(ca);

此外,您可以使用以下命令设置appender的名称:

ca.setName("My appender");

答案 1 :(得分:4)

这似乎是log4j中的known issue。您应该能够通过在将其添加到记录器之前调用appender上的activateOptions或使用ConsoleAppender的参数化构造函数来解决此问题。

您使用的是哪个版本?这个bug似乎存在于一个相当旧的版本中。