LOG4J2:多个记录器,到多个附加程序,处于不同的日志记录级别

问题描述 投票:0回答:1

我想做的事情非常简单:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="Console">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
    
    <File name = "hibernateFile" fileName = "${artifactId}/logs/hibernate.log"> 
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
    
     <File name = "springFile" fileName = "${artifactId}/logs/spring.log"> 
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
    
    <File name = "rootFile" fileName = "${artifactId}/logs/root.log"> 
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>        
    
  </Appenders>
  <Loggers>
    <Root level="trace">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="rootFile"/>
    </Root>
    
    <Logger name ="org.springframework" level = "debug"> 
        <AppenderRef ref = "Console" level = "info"/>
        <AppenderRef ref = "springFile" level = "debug"/>
    </Logger>
    
     <Logger name ="org.hibernate" level = "debug"> 
        <AppenderRef ref = "Console" level ="info"/>
        <AppenderRef ref = "hibernateFile" level = "debug"/>
    </Logger>
            
  </Loggers>
</Configuration>

我希望只在我的控制台附加程序上显示重要消息,而我希望将详细消息路由到文件附加程序。

但是,我不想过滤附加程序本身 - 因为我可能想在那里路由一些调试或跟踪消息(例如,当我在开发中时)。

The Apache FAQ 建议我可以通过

AppenderRef
上的日志记录级别进行过滤,但我已经尝试过这样做,如上面的 xml 中所述 - 它仍然将 DEBUG 级别消息路由到控制台。

我还尝试向

AppenderRef
添加 ThresholdFilter,但这也不会过滤它。

 <Logger name ="org.hibernate" level = "debug"> 
    <AppenderRef ref = "Console">
         <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    </AppenderRef>
    <AppenderRef ref = "hibernateFile" level = "debug"/>
</Logger>
logging log4j2
1个回答
7
投票

additivity="false"
应该可以解决问题:

<Logger name="org.hibernate" level="debug" additivity="false"> 

additivity
控制日志事件是否仍转发到根记录器。

© www.soinside.com 2019 - 2024. All rights reserved.