2009-09-07 32 views
13

我想以编程方式创建一个新的log4j ConsoleAppender并将其作为appender添加到记录器 - 我如何正确实例化一个 - 使用以下内容似乎使log4j抱怨 - 我需要使用哪些setter来正确配置它?如何在代码中创建新的log4j ConsoleAppender而不是config?

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

想必它是知道在ConsoleAppender上设置什么的情况,但我无法弄清楚。我假设有一些获取默认布局的方法。我只想要一个附加到SysOut的标准ConsoleAppender。任何指导赞赏,谢谢。

回答

28

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

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

此外,您还可以设置与附加目的地的名称:

ca.setName("My appender"); 
4

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

您使用的是什么版本?这个错误似乎存在于一个相当老的版本中。

相关问题