2014-02-20 54 views
1
<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文件。log4j2级别继承不起作用

下面的细节是我得到的,如果我在Java代码中使用配置对象。

X.Y.Z --- ERROR ----Parent : X.Y 
X.Y --- ERROR ----Parent : X 
X  --- ERROR ----Parent : root 
root --- TRACE ----Parent : null 

以上细节告诉我们正确的父名称,但它不是从父记录器“root”继承级别。

回答

1

在名为Logger的s上使用additivity="false"属性更常见,而不是在Root记录器上。

问题的最后一部分对我来说还不清楚。 “......如果我使用配置对象...”,你的意思是什么?除了log4j2.xml配置文件外,您是否正在使用Java源代码配置log4j2?或者你只是打电话给Logger.trace?你能显示源代码吗?

另外,您可以显示您的完整 log4j2.xml配置?

当你说“下面的细节是我所得到的......”时,你的意思是这是Log4j在控制台上产生的输出吗?

+0

Quote:'根记录器不支持可加性属性,因为它没有父。'。参考:https://logging.apache.org/log4j/2.x/manual/configuration.html#Appenders – arberg

1

在文档中说它不能将additivity属性放在Root记录器上,因为它没有意义。上面没有记录器可以添加。

加和基本意思是“对日志条目传递给层次结构中的父级记录器”

它不继承父水平。日志条目有一个级别。是否打印取决于是否有记录器来捕捉这样的条目(接受该条目的条目)。

因此,X.Y.Z会将日志传递给X.Y,除非在X.Y.Z记录器配置中设置了additivity=false。等等