2017-03-15 10 views
1

北米で夏時間に切り替えた後、ログに問題が発生しました。ログのロールオーバーポリシーによってリセットされるまで、ログの時刻はクロック「前に飛んでいる」を反映するように変更されませんでした。log4jと夏時間

我々はRollingRandomAccessFileアペンダ内で次のパターンレイアウトとポリシーを使用します。

 <PatternLayout> 
      <Pattern>%d{ISO8601} traceId=%X{X-B3-TraceId} spanId=%X{X-B3-SpanId} [%-15.20t] %-5p %-20c{1.} : %m%n</Pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
      <!-- 100MB limit before log file is rolled over --> 
      <SizeBasedTriggeringPolicy size="100 MB" /> 
     </Policies> 

誰もがlog4jのはこのような状況のためにサポートされていることを、ここで期待される動作に私を指すもらえますか?現在log4jバージョン2.4.1です。

+1

ログにUTCタイムスタンプを使用することを検討してください。それでは、あなたは決して "時間の変更"の問題はありません。 –

答えて

2

これはおそらくDEFAULTのように、名前を持っている全てのフォーマット(Log4j2は、事前に定義された日付フォーマットのために使用していますFixedDateFormatクラスのissue with DSTによって引き起こされる、ABSOLUTE、COMPACT、DATE、 ISO8601、およびISO8601_BASIC)。

この問題は修正され、今後のLog4j 2.8.2リリースに含まれる予定です。

+0

ここに記録されているとおり、https://issues.apache.org/jira/browse/LOG4J2-1849 – KramKroc

1

同様の状況では、パターンにTZを追加することが推奨されています。あなたはベルファストにいる(?と私はロンドンがより正確であると仮定しWikipediaから)ので、試してみてください。

<Pattern>%d{ISO8601}{Europe/London} traceId=%X{X-B3-TraceId} spanId=%X{X-B3-SpanId} [%-15.20t] %-5p %-20c{1.} : %m%n</Pattern> 

Log4J 2 Layoutsから:

D {パターン}

日{パターン}

ロギングイベントの日付を出力します。日付変換指定子の後に、SimpleDateFormatごとに日付と時刻のパターン文字列を含む中カッコのセットを続けることができます。

事前定義済みの形式は、DEFAULT、ABSOLUTE、COMPACT、DATE、ISO8601、およびISO8601_BASICです。

java.util.TimeZone.getTimeZoneごとにタイムゾーンIDを含む中括弧のセットを使用することもできます。日付書式指定子が指定されていない場合は、DEFAULT書式が使用されます。

Pattern    Example 
%d{DEFAULT}   2012-11-02 14:34:02,781 
%d{ISO8601}   2012-11-02T14:34:02,781 
%d{ISO8601_BASIC} 20121102T143402,781 
%d{ABSOLUTE}  14:34:02,781 
%d{DATE}   02 Nov 2012 14:34:02,781 
%d{COMPACT}   20121102143402781 
%d{HH:mm:ss,SSS} 14:34:02,781 
%d{dd MMM yyyy HH:mm:ss,SSS} 02 Nov 2012 14:34:02,781 
%d{HH:mm:ss}{GMT+0} 18:34:02 
%d{UNIX}   1351866842 
%d{UNIX_MILLIS}  1351866842781 

可能な重複:Configure DST(Daylight Savings Time) in log4j - それはあなたのために適切だ場合、TZUpdaterのに関する追加情報をメモを取ります。

追加の関連するバグレポート:How does log4j2 handle daylight savings