2012-04-04 12 views
23

Mit Log4net 1.2.11.0 w/.NET, wie kann ich die RollingFileAppender UTC Daten ausgeben?Log4Net: Log mit UTC Zeiten

Nach Apache sollte es so einfach sein wie:

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

Leider ist dies nicht funktioniert.

Die Gesamtheit meiner log4net-Konfiguration ist:

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

einen Decompiler verwenden kann ich sehen, dass die log4net dll innerhalb von RollingFileAppender den Typ ‚UniversalDateTime‘ als Privat Klasse.

Antwort

28

% Datum durch% utcdate ersetzen.

Beispiel:

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

In diesem Beispiel {ABSOLUTER} ist ein Datumsformat: The Log4Net PatternLayout documentation für weitere Informationen sehen.

Ich vermute, dateTimeStrategy kann mehr mit der Bestimmung, welche Mitternacht (lokal oder UTC) zu verwenden, beim Rollen nach Datum, aber bin mir nicht sicher darüber.

+1

Dies ist genau das, was ich suchte, um UTC-Daten zu drucken. Und ich denke, Sie haben recht, wenn dateTimeStrategy für das Datei-Rollover-Datum ist. Es gibt fast keine Dokumentation über diese Eigenschaft, aber da Sie es erwähnt haben, scheint das richtig zu sein. Vielen Dank. –

31

Beachten Sie, dass die Änderungen bei der Verwendung des AdoNetAppenders sehr unterschiedlich sind. In diesem Fall müssen Sie die Parametereinstellungen ändern:

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

Diese Änderung wird nun den korrekten UTC-Wert für das LogDate Feld schreiben.

+2

danke @Ed DeGagne, ich liebe Copy/Paste-Lösungen! – Pingi