<Loggers>
<Logger name="X.Y.Z">
<AppenderRef ref="Console" />
</Logger>
<Logger name="X.Y">
<AppenderRef ref="Console" />
</Logger>
<Logger name="X">
<AppenderRef ref="Console" />
</Logger>
<Root level="trace" additivity="false">
<AppenderRef ref="Console" />
</Root>
</Loggers>
这是我的log4j.xml文件。
如果我在Java代码中使用Configuration对象,下面的细节就是我得到的。
X.Y.Z --- ERROR ----Parent : X.Y
X.Y --- ERROR ----Parent : X
X --- ERROR ----Parent : root
root --- TRACE ----Parent : null
以上详细信息告诉我们正确的父名称,但它不是从父记录器“root”继承级别。
答案 0 :(得分:1)
在命名的additivity="false"
上使用Logger
属性更常见,而不是在Root
记录器上使用。
你的问题的最后部分我不清楚。你的意思是“......如果我使用配置对象......”?除了log4j2.xml配置文件之外,您是否使用Java源代码配置log4j2?或者你只是打电话给Logger.trace
?你能展示源代码吗?
此外,您能否显示完整的 log4j2.xml配置?
当你说“下面的细节是我得到的......”时,你的意思是这是Log4j在控制台上产生的输出吗?
答案 1 :(得分:1)
在文档中,它表示您不能将additivity
属性放在Root记录器上,因为它没有意义。它上面没有要添加的记录器。
Additivity基本上是指“将日志条目传递给层次结构中的父记录器”
它不会从父级继承级别。日志条目具有级别。是否打印取决于是否有记录器来捕获这样的条目(接受该级别的条目)。
因此,除非在X.Y.Z记录器配置中设置additivity=false
,否则X.Y.Z会将日志传递给X.Y.等等