2009-09-07 100 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的參數化構造函數來解決此問題。

您使用的是什麼版本?這個錯誤似乎存在於一個相當老的版本中。

相關問題