2012-04-04 3 views
23

Использование log4net 1.2.11.0 w/.NET, как я могу заставить RollingFileAppender выводить даты UTC?Log4Net: Log with UTC

Согласно Apache это должно быть так же просто, как:

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

К сожалению, это не работает.

Полнота моей конфигурации 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> 

Использование декомпилятор я могу видеть, что длл log4net имеет тип «UniversalDateTime» в качестве частного класса внутри RollingFileAppender.

ответ

28

Замените% date на% utcdate.

Пример:

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

В этом примере {АБСОЛЮТНЫЙ} является датой спецификатор формата: см The Log4Net PatternLayout documentation для получения дополнительной информации.

Я подозреваю, что dateTimeStrategy может быть больше связан с определением, какой из полуночи (локальный или UTC) использовать при прокатке по дате, но я не уверен в этом.

+1

Это именно то, что я искал для печати дат UTC. И я думаю, что вы правы в отношении даты dateTrategy для даты опрокидывания файлов. Рядом с документацией нет этого свойства, но, поскольку вы упомянули об этом, это кажется правильным. Спасибо. –

31

Помните, что при использовании AdoNetAppender изменения сильно различаются. В этом случае, вам необходимо изменить настройки параметров:

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

Это изменение будет теперь писать правильное значение UTC для поля logDate.

+2

спасибо @Ed DeGagne, я люблю копировать/вставлять решения! – Pingi