Frage

Ist es möglich, die Zeitzone anzugeben, die log4j verwendet wird? Ich brauche die Daten in der Protokolldatei, um eine andere Zeitzone als die Anwendung zu sein. log4j's PatternLayout Verwendet SimpleDateFormat. Leider scheint es keine Möglichkeit zu kontrollieren scheint SimpleDateFormatZeitzone über die Musterzeichenfolge (DateFormat hat setTimeZone Methode, aber das hilft nicht).

Ich schaute mir Log4js Quelle an und SimpleDateFormat wird in eingeleitet PatternParser.finalizeConverter. Leider gibt es keine einfache Möglichkeit, das zu erreichen DateFormat So setzen Sie die Zeitzone.

War es hilfreich?

Lösung

Wenn Sie die LOG4J Extras JAR -Datei auf Ihrem Klassenpfad verwenden, unterstützt die BETEMANDPATTERLAYOUT -Klasse diese Konfigurationsoption. Siehe den Javadoc bei dieser Link. Es wird als Teil der %D -Musterkomponente wie folgt behandelt:

log4j.appender.stdout.layout.ConversionPattern=%d{}{America/New_York} %p [%c] - %m%n

Sie können das Extras -Paket herunterladen hier.

Andere Tipps

Mein Fall ... muss das MusterLayout in EnhancedPatternLayout ändern. (log4j-1.2.17.jar)

log4j.appender.logfile.layout = org.apache.log4j.EnhancedPatternLayoutlog4j.appender.logfile.layout.ConversionPattern = [%d {iso8601} {GMT+9}]% - 5p -%m%n

Das obige Protokollmuster hat die richtige Idee, aber nicht vollständig korrekt (Sie erhalten keinen Zeitstempel im Protokoll).
Verwenden Sie dieses Muster sicher:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
oder
%d{ISO8601}{GMT-5} %p [%c] - %m%n

Es ist vorzuziehen, etwas wie {America/new_york} statt {GMT-5} zu verwenden, da durch Angeben einer Zeitzone eine automatische Anpassung erfolgt, wenn Tageslichteinsparungen in Betrieb sind. Wenn Sie so etwas wie GMT-5 angeben, wird die GMT-Zeitzone einfach an die angegebene Anzahl von Stunden angepasst.

Auch wenn Sie in der Standardzeitzone dinamisch -ungein wehten, können Sie die Methode "setConversionPattern" wie folgt erweitern und die Methode überschreiben:

@Override
public void setConversionPattern(String conversionPattern) {
    String defaultTimeZoneId = TimeZone.getDefault().getID();
    String conversionPatternModif = conversionPattern.replaceAll(
        "\\%d\\{([^\\{\\}]*)\\}([ ]*[^\\{]*)", 
        "%d{$1}{"+defaultTimeZoneId+"}$2");

    super.setConversionPattern(conversionPatternModif);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top