Ich möchte, dass das Protokoll Datumseinträge einer bestimmten Zeitzone enthält. Gibt es eine Möglichkeit, die Zeitzone in log4j.properties
zu erzwingen?
Jetzt verwende ich JDK 1.5, Wie Sie bereits wissen, gibt es in JDK 1.5 einen Zeitzonenfehler, der in JDK 1.5 entfernt wird. Im Falle von JDK 1.5 zeigt es standardmäßig "GMT" Zeitzone. Ich möchte in Log4j meine spezifische Zeitzone konfigurieren.
Damit können Sie in jeder Zeile Ihrer Protokolle Zeitzoneninformationen sehen:
%Vor%Der Trick besteht darin, 'zzz' in das Muster einzufügen, da dies nach Javadoc für java.text.SimpleDateFormat ( Ссылка ), das ist der Code für die Zeitzone. Log4J verwendet dieselben Regeln wie SimpleDateFormat.
Es gibt weitere Details über das im Log4J Javadoc:
Suchen Sie nach der Zeile in der Tabelle, in der das "Conversion Character" der Buchstabe "d" ist.
Am besten verwenden Sie die Apache Extras ™ für Apache log4j ™ Und ersetzen Sie das normale PatternLayout durch org.apache.log4j.EnhancedPatternLayout, wenn Sie eine Eigenschaftendatei verwenden:
%Vor%Dann können Sie% d {ISO8601} {GMT} anstelle von% d im ConversionPattern verwenden, um Ihr Datum im GMT-Format anzuzeigen. Jede Zeitzone kann anstelle von GMT angegeben werden
Fügen Sie ein date
Argument in Ihre ConversionPattern
ein. Aus der PatternLayout
-Dokumentation:
Datum -
Wird verwendet, um das Datum des Protokollierungsereignisses in der lokalen Zeitzone auszugeben. Um das Datum in der Universalzeit auszugeben, verwenden Sie das
%utcdate
-Muster. Das Der Datumsumwandlungsspezifizierer kann von einem Datumsformatbezeichner gefolgt werden zwischen Klammern. Zum Beispiel%date{HH:mm:ss,fff}
oder%date{dd MMM yyyy HH:mm:ss,fff}
. Wenn kein Datumsformat angegeben ist, dann Das ISO8601-Format wird angenommen (Iso8601DateFormatter
).Der Datumsformatbezeichner lässt dieselbe Syntax wie das Zeitmuster zu Zeichenfolge des
ToString
.Für bessere Ergebnisse wird empfohlen, das log4net-Datum zu verwenden Formatierer. Diese können mit einer der Zeichenfolgen angegeben werden "ABSOLUTE", "DATUM" und "ISO8601" für die Angabe
AbsoluteTimeDateFormatter
,DateTimeDateFormatter
bzw. %Code%. Zum BeispielIso8601DateFormatter
oder%date{ISO8601}
.Diese dedizierten Datumsformatier funktionieren deutlich besser als
%date{ABSOLUTE}
.
Dafür gibt es drei Schritte:
1) Fügen Sie die log4j-extras
Abhängigkeit hier
2) Legen Sie das Layout auf EnhancedPatternLayout fest:
log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
(ändere stdout
in den von dir verwendeten Appender)
3) Fügen Sie Ihre Zeitzone in geschweiften Klammern nach Ihrem Datum-Zeit-Muster hinzu
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}{IST} %-5p %c{1}:%L - %m%n
(Hier IST in meinem Fall)
Sie können auf die Liste der Zeitzonen-IDs zugreifen, die in Java hier oder hier