2017-01-19 70 views
0

HERE它說 -log4j2自定義設置printObject到真正的Appender

「附加目的地應明確printObject爲‘真’,如果toString方法 使傳遞到追加程序的屬性的值。」

有人可以解釋一下嗎?這是否意味着如果printObject = true,我們應該重寫toString()方法?而如果我們不覆蓋toString()呢?

回答

1

在Log4j 2初始化期間,配置中的所有插件都被處理並存儲在Node對象中。 Node.toString()方法被實現,如果原始插件的printObject屬性爲true,則Node.toString()將委託給插件的toString()方法。否則,它將返回一個包含插件類和插件名稱的字符串。

所以一般來說,提供一個好的toString()方法是明智的,並且聲明printObject爲真。另一方面,如果你錯過了這不是一場災難:這主要是爲了調試。因此,如果printObject爲真,但您不覆蓋toString(),則發生的一切就是在調試插件時,您將看不到有用的值。

Log4j 2在DEBUG/TRACE級別將初始化過程的詳細信息記錄到StatusLogger。如果您的配置以<Configuration status="trace">開頭,您可以看到此信息。

定製插件可能會使用printObject屬性來影響配置期間記錄到StatusLogger日誌記錄的內容。可以肯定的是,在初始化之後,在調試生成的Node值時顯示插件的toString()值是很有用的。

+0

非常感謝,這非常有用。但是,我認爲我的問題仍然沒有答案 - 如果printObject設置爲true,但Appender中沒有toString()方法? – Andy897

+0

感謝您的反饋。更新了答案。這是否更好? –

+0

最後一件事。如果printObject爲true,但我不重寫toString()它會回落到Node.toString()? – Andy897