2009-09-07 5 views
13

Ich möchte programmgesteuert einen neuen log4j ConsoleAppender erstellen und fügen Sie es als Appender zu einem Logger - wie gehe ich über instanziieren eines ordnungsgemäß - mit den folgenden scheint log4j beschweren - welche Setter muss ich verwenden, um es richtig zu konfigurieren ?Wie erstelle ich einen neuen log4j ConsoleAppender im Code im Gegensatz zu config?

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

Vermutlich ist es ein Fall von zu wissen, was auf dem ConsoleAppender zu setzen, aber ich kann es nicht herausgefunden. Ich nehme an, es gibt eine Möglichkeit, das Standardlayout zu bekommen. Ich möchte nur einen Standard ConsoleAppender, der an SysOut anfügt. Jede Anleitung geschätzt, danke.

Antwort

28

Sie müssen einen Writer auf dem Appender (und dann auch eine Layout, um den nächsten Fehler zu vermeiden, die Sie sehen würden) festlegen. Dies bedeutet, dass Sie eine anonyme Instanz nicht verwenden können, wie Sie müssen Verwenden Sie die Setter, um den Appender zu konfigurieren. z.B.

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

Sie können aber auch den Namen des appender mit ein:

ca.setName("My appender"); 
4

Dies scheint ein knownissue in log4j zu sein. Sie sollten dies beheben können, indem Sie entweder activateOptions auf dem Appender aufrufen, bevor Sie es dem Logger hinzufügen, oder indem Sie einen parametrisierten Konstruktor für ConsoleAppender verwenden.

Welche Version verwenden Sie? Der Fehler scheint in einer ziemlich alten Version zu existieren.

Verwandte Themen