LOG4J2:多个记录器,到多个附加器,在不同的日志记录级别

dwj*_*ton 3 logging log4j2

我想要做的很简单:

<?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>
Run Code Online (Sandbox Code Playgroud)

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

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

Apache的常见问题表明,我可以通过在日志记录级别过滤器AppenderRef,但我想这一点,如上面的XML概述-它仍然路线DEBUG级别的消息到控制台。

我还尝试向 中添加 ThresholdFilter AppenderRef,但这也不会对其进行过滤。

 <Logger name ="org.hibernate" level = "debug"> 
    <AppenderRef ref = "Console">
         <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    </AppenderRef>
    <AppenderRef ref = "hibernateFile" level = "debug"/>
</Logger>
Run Code Online (Sandbox Code Playgroud)

Fre*_*ger 5

additivity="false" 应该做的伎俩:

<Logger name="org.hibernate" level="debug" additivity="false"> 
Run Code Online (Sandbox Code Playgroud)

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