简体   繁体   English

LOG4J2:多个记录器,到多个appender,处于不同的日志记录级别

[英]LOG4J2: Multiple loggers, to multiple appenders, at different logging levels

What I'm trying to do is pretty straight forward: 我正在努力做的非常简单:

<?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>

I want only important messages to be displayed on my Console appender, while I want detailed messages to be routed to the file appenders. 我只希望在我的Console appender上显示重要消息,而我希望将详细消息路由到文件追加器。

However, I don't want to filter the appender itself - as I may want to route some debugging or trace messages there (for example when I'm in development). 但是,我不想过滤appender本身 - 因为我可能想在那里路由一些调试或跟踪消息(例如当我在开发中时)。

The Apache FAQ suggests that I can just filter by logging level on the AppenderRef , but I've tried this, as outlined in the above xml - and it still routes the DEBUG level messages to the console. Apache FAQ建议我可以通过AppenderRef上的日志级别进行过滤,但我已经尝试过这个,如上面的xml所述 - 它仍然将DEBUG级别消息路由到控制台。

I've also tried adding a ThresholdFilter to the AppenderRef , but that doesn't filter it either. 我也尝试将一个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>

additivity="false" should do the trick: additivity="false"应该做的伎俩:

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

The additivity controls whether a log event is also still forwarded to the root logger or not. additivity控制是否仍然将日志事件转发到根记录器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM