2012-04-04 15 views
23

Usando log4net 1.2.11.0 w/.NET, ¿cómo puedo hacer que RollingFileAppender dé salida a las fechas UTC?Log4Net: Log con tiempos UTC

De acuerdo con Apache que debería ser tan fácil como:

<dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" /> 

Desafortunadamente esto no está funcionando.

La totalidad de mi configuración de log4net es:

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
     <file value="Log-.txt" /> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd"/> 
     <PreserveLogFileNameExtension value="true" /> 
     <staticLogFileName value="false"/> 
     <appendToFile value="true" /> 
     <maxSizeRollBackups value="10" /> 
     <dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <!-- Options are "ALL", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "OFF". --> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFile" /> 
    </root> 
    </log4net> 

El uso de un decompilador puedo ver que la DLL log4net tiene el tipo 'UniversalDateTime' como una clase privada en el interior de RollingFileAppender.

Respuesta

28

Reemplazar la fecha del% por% utcdate.

Ejemplo:

<conversionPattern value="%utcdate{ABSOLUTE} UTC %c{1} - %m%n" /> 

En este ejemplo, {} ABSOLUTO es un especificador de formato fecha: ver The Log4Net PatternLayout documentation para obtener más información.

Sospecho que dateTimeStrategy puede estar más relacionado con la determinación de la medianoche (local o UTC) que se utilizará al pasar la fecha, pero no estoy seguro de esto.

+1

Esto es exactamente lo que estaba buscando para imprimir fechas UTC. Y creo que tiene razón acerca de la fecha en que TimeStrategy es para la fecha de transferencia del archivo. No hay documentación al lado de esa propiedad, pero desde que lo mencionó, parece correcto. Gracias. –

31

Tenga en cuenta que los cambios son muy diferentes cuando se utiliza AdoNetAppender. En ese caso, es necesario cambiar los ajustes de parámetros:

<parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawUtcTimeStampLayout" /> 
    <!--<layout type="log4net.Layout.RawTimeStampLayout" />--> 
</parameter> 

Este cambio ahora escribirá el valor GMT correcto para el campo LogDate.

+2

gracias @Ed DeGagne, ¡me encantan las soluciones de Copiar/Pegar! – Pingi