2012-04-04 22 views
23

Utilizzo di log4net 1.2.11.0 w/.NET, come posso ottenere che RollingFileAppender fornisca le date UTC?Log4Net: registrazione con ora UTC

Secondo Apache dovrebbe essere facile come:

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

Purtroppo questo non sta funzionando.

La totalità della mia configurazione log4net è:

<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> 

Utilizzando un decompilatore posso vedere che la DLL log4net ha il tipo 'UniversalDateTime' come una classe privata all'interno di RollingFileAppender.

risposta

28

Sostituisci% data con% utcdate.

Esempio:

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

In questo esempio, {} ASSOLUTO è una data di formato: vedi The Log4Net PatternLayout documentation per maggiori informazioni.

Ho il sospetto che lo dateTimeStrategy potrebbe essere più a che fare con la determinazione della mezzanotte (locale o UTC) da utilizzare quando si esegue il rollover per data, ma non sono sicuro di ciò.

+1

Questo è esattamente quello che stavo cercando per stampare le date UTC. E penso che tu abbia ragione sul fatto che dataTimeStrategy sia per la data di rollover del file. Non c'è quasi nessuna documentazione su quella proprietà, ma dal momento che l'hai menzionata, sembra corretta. Grazie. –

31

Tenere presente che le modifiche sono molto diverse quando si utilizza AdoNetAppender. In tal caso, è necessario modificare le impostazioni dei parametri:

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

Questo cambiamento sarà ora scrivere il valore UTC corretto per il campo LogDate.

+2

grazie a DeGagne, adoro le soluzioni di copia/incolla! – Pingi

Problemi correlati