2009-01-06 80 views
4

根據Log4Net documentation,RollingFileAppender只會在記錄消息時滾動日誌文件。我需要登錄到此文件,但每天都會將其導入另一個數據庫。我無法使用數據庫appender,因爲我需要這些文件,並且必須將數據從日誌文件轉換爲數據庫(它不是直接複製)。問題是如果午夜後沒有日誌活動,日誌不會滾動。導入器查找以前的日期文件(並且我無法更改此代碼),因此如果沒有活動並且日誌尚未滾動,則導入器不會找到該文件。有沒有辦法強制日誌在午夜滾動而又沒有另一個線程醒來並強制它滾動?一個自定義的appender可以這樣做嗎?如果可能,我想避免這種情況。強制Log4Net RollingFileAppender滾動

回答

5

編寫一個Windows服務,在午夜之後觸發事件,使用相同的配置寫入虛擬日誌條目。

+0

我會說另一個過程,基本上是另一個線程。 – kenny 2009-01-06 22:33:24

0

按照RollingFileAppender documentation,你可以將其設置爲每天滾動,看到這樣的配置:

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

...但在下一個日期間隔過後(即在OP的案例中午夜之後),該文件實際上並沒有被滾動,直到appender收到日誌消息。然後它會滾動文件並開始一個新文件。 – 2012-09-21 14:47:20

3

你要想想這個從什麼代碼路徑導致翻車的問題」的點常規?」。一旦你知道如何達到這個程序,你可以決定如何觸發它。

自定義的appender能做到嗎?當然,但是在appender中沒有代碼會運行,直到你通過它登錄,所以你回到了原點。

至於「無論如何強迫日誌在午夜滾動而沒有另一個線程醒來並強制它滾動?」,我會說這個問題等同於「是否有可能強制日誌在午夜沒有任何代碼運行?「。我並不試圖對此有趣,也不想侮辱你,我只是試圖用一種希望爲你回答問題的方式來重述這個問題。 :-)

解決這個問題的最簡單方法是喚醒並記錄日誌以強制文件旋轉。