2017-01-19 6 views
0

HERE Er sagt, dass -log4j2 Einstellung printObject auf true in benutzerdefinierte Appender

true „Appen printObject als angeben sollten‚‘, wenn die Methode toString die Werte der Attribute macht auf die Appender übergeben.“

Kann mir bitte jemand das erklären? Bedeutet dies, dass wenn printObject = true, wir die toString() Methode überschreiben sollten? Und was, wenn wir toString() nicht überschreiben?

Antwort

1

Während der Log4j 2-Initialisierung werden alle Plugins in der Konfiguration verarbeitet und in Node-Objekten gespeichert. Die Node.toString() -Methode ist so implementiert, dass, wenn das Original-Plugin printObject Attribut wahr ist, Node.toString() an die Methode toString() des Plugins delegiert wird. Andernfalls wird ein String zurückgegeben, der die Plug-in-Klasse und den Namen des Plugins enthält.

Also im Allgemeinen ist es ratsam, eine gute toString() -Methode anzugeben und printObject für wahr zu erklären. Auf der anderen Seite ist es keine Katastrophe, wenn Sie beides vermissen: Dies ist hauptsächlich zum Debuggen. Also, wenn printObject wahr ist aber du toString() nicht überschreibst, passiert alles, dass beim Debuggen deines Plugins keine brauchbaren Werte angezeigt werden.

Log4j 2 protokolliert Details des Initialisierungsprozesses zum StatusLogger auf DEBUG/TRACE-Ebene. Sie können diese Informationen sehen, wenn Ihre Konfiguration mit <Configuration status="trace"> beginnt.

Es ist möglich, dass benutzerdefinierte Plugins das Attribut printObject verwenden können, um zu beeinflussen, was während der Konfiguration in der StatusLogger-Protokollierung protokolliert wird. Sicher ist, dass nach der Initialisierung der toString() - Wert Ihres Plugins beim Debuggen der resultierenden Node-Werte angezeigt wird.

+0

Vielen Dank, das ist sehr nützlich. Aber ich denke meine Frage ist irgendwie unbeantwortet - Was ist, wenn printObject auf true gesetzt ist, aber keine toString() Methode im Appender? – Andy897

+0

Danke für die Rückmeldung. Die Antwort wurde aktualisiert. Ist das besser? –

+0

Eine letzte Sache. Wenn printObject true ist, aber ich toString() nicht überschreibe, wird es auf Node.toString() zurückfallen? – Andy897

Verwandte Themen