LOG4Jの日付のタイムゾーンを指定します
質問
Log4Jが使用するタイムゾーンを指定することは可能ですか?ログファイルの日付は、アプリケーションとは異なるタイムゾーンである必要があります。 log4j's PatternLayout
使用します SimpleDateFormat
. 。残念ながら、制御する方法はないようです SimpleDateFormat
パターン文字列を介したタイムゾーン(DateFormat
もっている setTimeZone
方法ですが、それは役に立ちません)。
Log4Jのソースを見ました SimpleDateFormat
インスピレーションを受けています PatternParser.finalizeConverter
. 。残念ながら、を手に入れる簡単な方法はありません DateFormat
タイムゾーンを設定します。
他のヒント
私のケースは、PatternLayoutを拡張Patternlayoutに変更する必要があります。 (log4j-1.2.17.jar)
log4j.appender.logfile.layout = org.apache.log4j。EnhancedPatternlayoutlog4j.appender.logfile.layout.conversionpattern = [%d {iso8601} {gmt+9}]%-5p-%m%n
上記のログパターンには正しいアイデアがありますが、完全には正しくありません(ログにタイムスタンプはありません)。
確かにこのパターンを使用してください:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
また
%d{ISO8601}{GMT-5} %p [%c] - %m%n
{gmt-5}よりも{America/new_york}のようなものを使用することが望ましいです。タイムゾーンを指定することにより、夏時間が動作している場合は自動調整が行われるからです。 GMT-5のようなものを指定すると、指定された時間だけGMTタイムゾーンを調整します。
また、デフォルトのタイムゾーンをdinamicaly obteinにしている場合は、拡張パターンレイアウトを拡張して、次のようなメソッド「setConversionPattern」を上書きすることができます。
@Override
public void setConversionPattern(String conversionPattern) {
String defaultTimeZoneId = TimeZone.getDefault().getID();
String conversionPatternModif = conversionPattern.replaceAll(
"\\%d\\{([^\\{\\}]*)\\}([ ]*[^\\{]*)",
"%d{$1}{"+defaultTimeZoneId+"}$2");
super.setConversionPattern(conversionPatternModif);
}