2010-11-24 11 views
1

Die Aufgabe:log4j: Liste der Eigenschaften für jeden Appender?

Ich versuche, einen Appender zu konfigurieren, um zu einem JTextArea auszugeben. Ich glaube, dass ein WriterAppender in einen OutputStream schreiben kann. Ich habe OutputStream bereits in eine Unterklasse umgewandelt, um eine JTextAreaOutputStream-Klasse zu erstellen, die derzeit durch die Übernahme der Ausgabe von System.out und System.err aufgefüllt wird.

Die configuraton Datei:

# File appender for the GUI screen 
    log4j.appender.gui = org.apache.log4j.WriterAppender 
    log4j.appender.gui.Target=project.gui.GUIView.logWindow //logWindow is the name of my JTextArea 

    # Root logger option 
    log4j.rootLogger=INFO, gui 

Der Fehler:

log4j:WARN No such property [target] in org.apache.log4j.WriterAppender. 

Die Frage:

Wer weiß, wo ich den gültigen Satz von Eigenschaften pro Appender identifizieren können?

Antwort

2

Warum denken Sie, dass WriterAppender eine solche Eigenschaft hat? Soweit ich aus JavaDocs sehen kann, hat es keine solche Eigenschaft. Vielleicht verwirren Sie es mit ConsoleAppender?

Sie können eine Liste von Eigenschaften pro Appender erhalten, wenn Sie relevanten JavaDoc/Quellcode öffnen und alle JavaBean-Stil Setter-Methoden nachschlagen. Dies bedeutet, dass, wenn WriterAppendertarget Eigenschaft haben würde, müsste setTarget(...) Setter-Methode haben.

Wie dem auch sei, empfehle ich Ihnen zu Unterklasse WriterAppender und erstellen Sie Ihre eigenen JTextAreaAppender, die in Ihrer benutzerdefinierten OutputStream zu Superklasse passieren würde. Beispiele für solche Unterklassen finden Sie unter ConsoleAppender und FileAppender.

EDIT: durch die Art und Weise, wie Sie höchstwahrscheinlich in einem Verweis auf JTextArea auf Ihre JTextAreaAppender übergeben müssen, würde ich Ihnen empfehlen log4j programmatisch zu konfigurieren. Oder fügen Sie Ihren benutzerdefinierten Appender programmatisch hinzu, nachdem Sie einen Verweis auf die haben.

Oder noch besser, könnte man es so konfigurieren, über Properties-Datei, aber die anfängliche JTextArea Referenz null verlassen - nach Ihrer Anwendung gestartet wurde und Sie haben Ihre jTextArea Referenz können Sie programmatisch alle log4j Appender suchen Trog und in den Pass Referenz auf Ihre benutzerdefinierte JTextAreaAppender.

+0

Das ist mein Punkt Neeme. Ich habe den Namen des Grundstücks völlig erraten, indem ich ihn von einer anderen Art von Appender gestohlen und meine Finger gekreuzt habe. Das JavaDoc scheint nur Methodennamen und nicht Eigenschaften zu enthalten, die gesetzt werden können? – Ben

+0

Diese Eigenschaften haben nichts Magisches - sie sind alle in JavaDocs sichtbar, in Form von JavaBean "Setter-Methoden". WriterAppender verfügt nicht über die Eigenschaft "target", da WriterAppender nicht über die entsprechende Methode "setTarget (String)" verfügt. –

+0

Hat das deine Frage beantwortet? Wenn ja, dann akzeptiere meine Antwort ;-) http://stackoverflow.com/faq#howtoask –

0

Ich weiß, das ist ziemlich alt, aber ich wollte nur auf diese Frage folgen, da ich gerade den ganzen Vormittag damit verbracht habe, die gleichen Informationen zu finden.

Von was ich sagen kann der log4j WriterAppender kann nicht in einer externen Konfigurationsdatei konfiguriert werden, da es keine konfigurierbaren Optionen hat. Die Klasse wurde entwickelt, um in eine Writer oder OutputStream zu schreiben, und es gibt keine Möglichkeit, dieses Objekt in der stringbasierten Konfigurationsdatei anzugeben.

Wenn dies nicht stimmt, korrigieren Sie bitte mich und zeigen Sie mich an die Stelle, wo die richtigen Informationen gefunden werden können. Ich bin irgendwie überrascht, dass diese Antwort nicht so einfach und offensichtlich gefunden wird wie sie ist.

2

Hier ist, wie ich WriterAppender konfiguriert:

In log4j.properties:

log4j.rootLogger=INFO, ConsoleAppenderInstance,FileAppenderInstance, WriterAppenderInstance 
... 
log4j.appender.WriterAppenderInstance=org.apache.log4j.WriterAppender 
log4j.appender.WriterAppenderInstance.layout=org.apache.log4j.PatternLayout 
log4j.appender.WriterAppenderInstance.layout.ConversionPattern=%m%n 

In Java-Code:

StringWriter writer = new StringWriter(); 
Logger root = Logger.getRootLogger(); 
WriterAppender app = (WriterAppender)root.getAppender("WriterAppenderInstance"); 
app.setWriter(writer); 
... 
writer.toString() 

Und wie für die verfügbaren Eigenschaften, ich denke, alles Start mit set hier: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/WriterAppender.html (und in Unterklassen)

Verwandte Themen