log4j2级别继承不起作用

时间:2014-02-20 18:28:03

标签: log4j2

<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”继承级别。

2 个答案:

答案 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.等等