Domanda

È possibile specificare il fuso orario che Log4j utilizzerà? Ho bisogno che le date nel file di registro siano un fuso orario diverso da quello dell'applicazione. log4j's PatternLayout usi SimpleDateFormat. Purtroppo non sembra esserci un modo per controllare SimpleDateFormatfuso orario tramite la stringa di pattern (DateFormat ha setTimeZone metodo ma questo non aiuta).

Ho guardato la fonte di Log4j e SimpleDateFormat viene ispirato in PatternParser.finalizeConverter. Purtroppo non c'è un modo semplice per ottenere una presa del DateFormat Per impostare il fuso orario.

È stato utile?

Soluzione

Se si utilizza il file JAR di Log4j Extras sul tuo percorso di classe, la classe EnhancedPatternLayout supporta questa opzione di configurazione. Vedi il Javadoc a questo link. È gestito come parte del componente del modello %d come questo:

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

Puoi scaricare il pacchetto extras qui.

Altri suggerimenti

Il mio caso ... deve cambiare il patternLayout in potenziatopatternlayout. (log4j-1.2.17.jar)

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

Il modello di registro sopra ha un'idea giusta ma non è completamente corretto (non si ottiene alcun timestamp nel registro).
Usa questo modello di sicuro:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
o
%d{ISO8601}{GMT-5} %p [%c] - %m%n

È preferibile usare qualcosa come {America/New_york} anziché {GMT-5} perché specificando un fuso orario verrà effettuata una regolazione automatica se il risparmio diurno è operativo. Specificare qualcosa come GMT-5 regolerà semplicemente il fuso orario GMT entro la quantità di ore specificate.

Inoltre, se si svuota il fuso orario predefinito, è possibile estendere il maestro e sovrascrivere il metodo "setConversionPattern" in questo modo:

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

    super.setConversionPattern(conversionPatternModif);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top