2017-10-05 7 views
0

私はlog4j2を初めて使用しています。以前私はlog4jを使用しています。パート2に移行するのは、非同期ロギングのためです。インターネットを検索した後、実際に2つのログファイル "Errors.log"と "Messages.log"を作成する構成ファイルを書き込むことができます。問題は次のとおりです。私は遠くから離れているサーバーと通信しています。私は、サーバーと通信して要求を送信するクライアントを書いて、サーバーは応答を返します。どのような状況でも、要求がサーバーに到達し、サーバーからの応答を返すためには少なくとも10ミリ秒かかります。しかし、私のログファイルでは、サーバーに送信された要求とサーバーから受信された要求が同じ時間(同じミリ秒)であることが示されています。私は非同期ロギングを使用しています。これはタイムスタンプが間違っていますか?そうしないと、私が使ったポリシーがこれらの問題を作り出していますか?私のカスタムLog4j2 XML設定ファイルのログ時間が正しくありませんJava

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn"> 
    <Appenders> 
    <File name="my_file_appender" fileName="LOG4j_LOGS/Errors.log" immediateFlush="false" append="false"> 
     <PatternLayout> 
     <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n</Pattern> 
     </PatternLayout> 
    </File> 
    <Async name="async_appender"> 
    <AppenderRef ref="my_file_appender" /> 
    </Async> 
    <!-- file appender --> 
    <RollingFile name="Error-log" fileName="LOG4j_LOGS/Messages.log" 
       filePattern="LOG4j_LOGS/Messages-%d{yyyy-MM-dd}.log"> 
     <!-- log pattern --> 
     <PatternLayout> 
      <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n</Pattern> 
     </PatternLayout> 
     <!-- set file size policy --> 
     <Policies> 
      <TimeBasedTriggeringPolicy /> 
      <SizeBasedTriggeringPolicy size="100 MB" /> 
     </Policies> 
     <DefaultRolloverStrategy max="25"/> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Logger name="Error-log" level="info" additivity="false"> 
     <appender-ref ref="Error-log" level="debug"/> 
     </Logger> 
     <Root level="info" includeLocation="false"> 
      <AppenderRef ref="async_appender"/> 
     </Root> 
    </Loggers> 
</Configuration> 

は誰私のCONFIGファイルをチェックしてくださいすることができ:

以下は私のLog4j2 XML設定ファイルです。私が望むのは、2つの別々のログファイルを作成することです.1つは情報メッセージを格納し、もう1つはエラーを格納するためのものです。アプリケーションを実行するたびに新しいファイルが作成され、以前のログは削除されません。ログのサイズは何でもかまいません。サイズを超えた場合は、新しいファイルを作成し、そのファイルにデータを書き込む必要があります。アプリケーションを何日実行しても、日々のログを保存し、プロセス全体を非同期で実行する必要があります。私も非同期でログインするためのVMオプションの下に使用しています

-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 

答えて

1

ロギングが行われた場合、非同期あなたがメッセージをログには、別のキューになりました。タイムスタンプはアペンダーパターンの一部なので、ディスクにログを書き込むバックグラウンドスレッドの処理時にタイムスタンプされます。したがって、注文のみが保存されます。タイムスタンプは若干異なる場合があります。

詳細はhttps://logging.apache.org/log4j/2.x/manual/async.htmlを参照してください。

関連する問題