Pregunta

¿Es posible especificar la zona horaria que LOG4J usará? Necesito que las fechas en el archivo de registro sean una zona horaria diferente a las de la aplicación. log4j's PatternLayout usos SimpleDateFormat. Lamentablemente no parece haber una forma de controlar SimpleDateFormatLa zona horaria a través de la cadena de patrón (DateFormat posee setTimeZone método pero eso no ayuda).

Miré la fuente de Log4J y SimpleDateFormat está siendo instiantiado en PatternParser.finalizeConverter. Desafortunadamente, no hay una manera fácil de conseguir el DateFormat Para establecer la zona horaria.

¿Fue útil?

Solución

Si usa el archivo jar de extras log4j en su classpath, la clase mejorada de PatternLayout admite esta opción de configuración. Ver el Javadoc en este enlace. Se maneja como parte del componente de patrón %D como este:

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

Puedes descargar el paquete extras aquí.

Otros consejos

Mi caso ... debe cambiar el PatternLayout a mejorado PatternLayout. (log4j-1.2.17.jar)

log4j.appender.logfile.layout = org.apache.log4j.Mejorado en el dayolog4j.appender.logfile.layout.conversionPattern = [%d {ISO8601} {gmt+9}]% - 5p -%m%n

El patrón de registro anterior tiene una idea correcta pero no es completamente correcta (no obtiene ninguna marca de tiempo en el registro).
Use este patrón seguro:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
o
%d{ISO8601}{GMT-5} %p [%c] - %m%n

Es preferible usar algo como {America/New_york} en lugar de {GMT-5} porque al especificar una zona horaria se realizará un ajuste automático si los ahorros de la luz del día son operativos. Especificar algo como GMT-5 simplemente ajustará la zona horaria GMT por la cantidad especificada de horas.

Además, si está en Dinamicaly Obtein la zona horaria predeterminada, puede extender mejorado PatternLayout y sobrescribir el método "setConversionPatn" como este:

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

    super.setConversionPattern(conversionPatternModif);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top