2017-04-04 2 views
1

ルートロガーは同期ロガー(INFOレベル)に設定されています。私はまた、いくつかの非同期ロガーを持っています。非同期ロガーの1つは、カスタマイズされた上位ログレベルTOAST(789)で構成されています。これはレベルTRACE(600)より高いです。log4j2のカスタムログレベルの問題

これを行う理由は、非同期ロガーとそれ自身のアペンダーを介してログに記録される特別なイベントに使用できるログレベルを持つためです。

TOASTイベントを同期型ルートロガーまたはその他のロガーに送信したくないのですが、非同期TOASTロガーとそれに対応するアペンダーだけが可能ですか?

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

あなただけの今まであなたのメッセージは1つのロガーとそのアペンダに行きたいので、あなたが本当に名前のロガーないカスタムレベルを望むようにそれは私に聞こえます。カスタムログレベルを使用する必要がありそうでない場合、その後、あなたはThreshold Filterfilteringであなたが望むものを達成することができ

<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"); 
... 

:おそらく、あなたはより多くのようなものを使用する必要があります。

+0

情報@ D.Bに感謝します。名前の付いたロガーを正確に説明した通りに実行しましたが、ログメッセージはロガーの出力で残っていますが、残念ながら..(同期ルートと非同期名前付きロガーとも)。次に、SYNCロガーに出力される出力のサンプルを示します( '2017-04-03 23:04:42,534 [http-nio-8443-exec-1] TOAST_LOGGER log-INFO:blah')。何かご意見は?このアプローチを有効にすることができれば、カスタムログレベルなしでもうまくいきます。ありがとうございます – user46743

+0

私はそれが可能性が高いと思うadditivity。 log4j2のドキュメントの[additivity](https://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity)セクションを参照し、適切なロガーでadditivityをfalseに設定してください。私は、トーストロガーの偽に設定することは十分だと思っています。「イベントが追加機能をfalseに設定してロガーに到達すると、イベントは加算値の設定に関係なく、親ロガーのいずれにも渡されません" –

+0

ありがとう@ D.B。加法性が、親に中継される値の問題を修正したように見える。 – user46743