2012-04-04 12 views
23

Używając log4net 1.2.11.0 w/.NET, jak mogę uzyskać RollingFileAppender na wyjściu dat UTC?Log4Net: Zaloguj się z czasem UTC

Według Apache powinno być tak proste, jak:

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

Niestety to nie działa.

Całość mojej konfiguracji log4net jest:

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

Korzystanie decompiler widzę, że dll log4net ma typ „UniversalDateTime” jako prywatnej klasy wewnątrz RollingFileAppender.

Odpowiedz

28

Zastąp% datę przez% utcdate.

Przykład:

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

W tym przykładzie, {} ABSOLUTE jest format daty specifier: patrz The Log4Net PatternLayout documentation aby uzyskać więcej informacji.

Podejrzewam, że dateTimeStrategy może mieć więcej wspólnego z określaniem, która północ (lokalna lub UTC) ma być używana podczas toczenia według daty, ale nie jestem tego pewien.

+1

To jest dokładnie to, czego szukałem, aby wydrukować daty UTC. I myślę, że masz rację, jeśli chodzi o dateTimeStrategy dla daty rolowania plików. Nie ma żadnej dokumentacji dotyczącej tej nieruchomości, ale od kiedy o tym wspomniano, wydaje się to poprawne. Dziękuję Ci. –

31

Należy pamiętać, że zmiany są znacznie różne podczas korzystania z AdoNetAppender. W takim przypadku należy zmienić ustawienia parametrów:

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

Ta zmiana spowoduje teraz zapisanie prawidłowej wartości UTC dla pola logDate.

+2

dzięki @Ed DeGagne, kocham rozwiązania Copy/Paste! – Pingi