2012-04-04 90 views
23

使用log4net 1.2.11.0 w/.NET,如何獲取RollingFileAppender以輸出UTC日期?Log4Net:使用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的DLL有型「UniversalDateTime」作爲RollingFileAppender進行內部的私有類。

回答

28

用%utcdate替換%日期。

實施例:

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

在這個例子中,{} ABSOLUTE是日期格式說明:參見The Log4Net PatternLayout documentation獲取更多信息。

我懷疑dateTimeStrategy可能與確定在按日期滾動時使用哪個午夜(本地或UTC)有關,但我不確定這一點。

+1

這正是我正在尋找打印UTC日期。我認爲你對於文件翻轉日期的dateTimeStrategy是正確的。該財產旁邊沒有任何文件,但自從你提到它以來,這似乎是正確的。謝謝。 – 2012-04-04 14:31:33

31

請注意,使用AdoNetAppender時所做的更改會有很大差異。在這種情況下,你需要改變參數設置:

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

這種變化現在寫的LOGDATE場正確的UTC值。

+2

謝謝@Ed DeGagne,我喜歡複製/粘貼解決方案! – Pingi 2015-11-30 15:56:31