2013-08-30 56 views
1

我試圖讓log4net RollingFileAdapter工作,以便我的日誌文件按日期滾動。但是我發現,即使我複製example code,我也沒有得到我期望的行爲。它不是獲取當今日期和時間的單個文件,而是將日誌消息分割成兩個不同的文件。一個文件被稱爲「日誌」,第二個文件服從配置,將被稱爲「log20130830-1115.txt」。爲什麼log4net在使用RollingFileAppender時創建兩個單獨的日誌文件?

如果我在配置文件中使用<log4net debug="true">,我看到在跟蹤輸出folling:

log4net: Initial roll over to [c:\inetpub\wwwroot\QuartzTest\ScheduleTest\bin\Debug\log20130830-1115.txt] 
log4net: Moving [c:\inetpub\wwwroot\QuartzTest\ScheduleTest\bin\Debug\log] -> [c:\inetpub\wwwroot\QuartzTest\ScheduleTest\bin\Debug\log20130830-1115.txt] 

通知書線兩條...爲什麼它首先創建一個名爲「日誌」文件?爲什麼它似乎沒有采取這樣的舉措呢? 'log'中的條目總是在正確命名文件中的任何條目之後加上時間戳,即使該文件首先出現。

這裏發生了什麼?我搞砸了配置還是有log4net RollingFileAppender中的錯誤?

這裏是我的配置:

<log4net debug="true"> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="[log4net] %d [%t] %-5p %l - %m%n" /> 
     </layout> 
    </appender> 

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd-HHmm'.txt'" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="INFO" /> 
     <appender-ref ref="TraceAppender" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
</log4net> 

回答

1

你滾動日期,這意味着只要datePattern您指定的變化,log4net的將推出的日誌文件。您已指定每分鐘更改一次的日期模式,因此您應該預計每分鐘會有一次新的日誌滾降。

這些滾降將使用您指定的日期模式命名。但活動的日誌文件將被命名爲「日誌」,並在滾降期間重命名。也就是說,對於你的配置,log4net將總是寫入名爲「log」的文件,並在datePattern值更改後複製它。

如果我正確理解你,那麼你希望你的配置中使用日期模式來命名你的活動日誌文件。試試這個:

<appender name="RollingFileDateAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="log.txt" /> 
    <appendToFile value="true" /> 
    <preserveLogFileNameExtension value="true" /> 
    <staticLogFileName value="false" /> 

    <rollingStyle value="Date" /> 
    <datePattern value="yyyyMMdd-HHmm" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 

staticLogFileName設置控制「活動」日誌文件的名稱;當它爲false時,log4net將使用datePattern命名活動日誌文件。請注意,這意味着不需要完成滾降複製,將會創建一個新的日誌文件(使用適當的名稱)。將preserveLogFileNameExtension設置爲true將強制log4net在創建文件時使用.txt文件擴展名;通常它會將日期模式追加到文件名的末尾,導致像.txt20130830-0819這樣的文件擴展名,這很無用。

+0

這個東西還有沒有改進log4net?一旦當前日誌達到2 MB,我需要用日期時間戳創建日誌:( – Prasanna

相關問題