2017-04-04 335 views
1

根记录器被配置为INFO级别的同步记录器。我也有几个Async记录器。其中一个Async记录器配置在定制的更高日志级别TOAST(789)。这高于TRACE的水平(600)。log4j2中的自定义日志级别问题

这样做的原因是让日志级别可用于通过Async Logger和他们自己的appender记录特殊事件。

我们不希望TOAST事件要进入同步根记录器或其他记录器..但仅限于Async TOAST记录器及其相应的appender ..是否有可能?

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration monitorInterval="120" packages=“com.pack.toast”> 
    <CustomLevels> 
     <CustomLevel name=“TOAST” intLevel=“789” /> 
    </CustomLevels> 

    <Appenders> 
     <RollingFile fileName="${sys:catalina.base}/logs/packiu.log" 
      append="true" name="DRFILE" 
      filePattern="${sys:catalina.base}/logs/packiu-%d{yyyy-MM-dd}-%i.log"> 
      <PatternLayout> 
       <Pattern>%d [%t] %c %M - %p: %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <OnStartupTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="10 MB" /> 
      </Policies> 
      <DefaultRolloverStrategy max="30" /> 
     </RollingFile>   
     <RollingFile name="RollingFile" fileName="/Users/toasty/logs/roll_file_app.log" 
        filePattern="logs/app-%d{MM-dd-yyyy}.log.gz" immediateFlush="true" > 
       <PatternLayout> 
         <pattern>%m%n</pattern> 
       </PatternLayout> 
       <TimeBasedTriggeringPolicy /> 
     </RollingFile> 
     <Rewrite name="Rewrite" ignoreExceptions = "true" > 
      <ToastAppenderPolicy toastNeeded="true"> 
      </ToastAppenderPolicy> 
      <AppenderRef ref="RollingFile"/> 
     </Rewrite> 

    </Appenders> 
    <Loggers> 
     <Logger name="net.rubyeye" level="off" /> 
     <Logger name="com.google.code" level="off" />    

     <AsyncLogger name="com.pack.toast.ToastLoggerImpl" level=“TOAST” includeLocation="true"> 
      <AppenderRef ref="Rewrite" /> 
     </AsyncLogger> 

     <Root level="info"> 
      <AppenderRef ref="DRFILE" /> 
     </Root> 

    </Loggers> 
</Configuration> 

回答

0

这听起来像你对我真的想要一个名为记录不是自定义级别,因为您只想你的邮件发到一个记录器及其追加程序。也许你应该使用更多的东西一样:

<AsyncLogger name="TOAST_LOGGER" level=“INFO” includeLocation="true"> 
    <AppenderRef ref="Rewrite" /> 
</AsyncLogger> 

,然后在你的代码

private static final Logger TOAST_LOGGER = LogManager.getLogger("TOAST_LOGGER"); 
... 
TOAST_LOGGER.info("Toast message"); 
... 

否则,如果必须使用自定义日志级别,那么你可以完成你想要通过filteringThreshold Filter

+0

感谢您的Info @ D.B。我完全按照概述完成了命名记录器,但日志消息仍然在两个记录器的输出中结束,不幸的是..(同步根和异步命名记录器)。以下是输出到SYNC记录器的示例 - “2017-04-03 23:04:42,534 [http-nio-8443-exec-1] TOAST_LOGGER log - INFO:blah'。有什么想法吗?没有自定义日志级别,我很好,如果这种方法可以工作。谢谢 – user46743

+0

我相信这可能是由于可加性。请参阅log4j2文档的[additivity](https://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity)部分,并在相应的记录器上将additive设置为false。我想在吐司记录器上将它设置为false应该是足够的,因为它说,“一旦事件到达记录器,其addability设置为false,事件将不会传递到它的任何父记录器,无论它们的可加性设置如何“。 –

+0

谢谢@ D.B。可加性似乎已经解决了值传递给父母的问题。 – user46743