2017-01-19 59 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