2017-04-04 89 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