2011-10-25 96 views
4

我的應用程序使用幾個appender -a FileAppender,MemoryAppenderAdoNetAppender。我有一個命令重置日誌,以便按需創建新文件。這很好 - 我只需撥打log4net.LogManager.GetRepository().Shutdown()即可。在調用Shutdown()後重新啓動log4net內存appender()

我也同時登錄到MemoryAppender,我有一個計時器將事件從appender中取出並顯示在日誌窗口中。當我使用上述重置功能時,日誌窗口會停止顯示消息,因爲沒有更多事件正在記錄。

對於FileAppender,我可以通過在設置合適的文件名後調用ActivateOptions來重新開始記錄。我在MemoryAppender上調用了ActivateOptions,但這並沒有讓它再次開始記錄。在致電ActivateOptions之前,我已經查看了該對象以確保它已被配置。它實際上保留了我稱之爲重置功能的配置,所以看起來沒問題。

我也在網上搜索過,有人說你只需要撥打log4net.Config.DOMConfigurator.Configure(已棄用 - 現在是log4net.Config.XmlConfigurator.Configure`),但那也行不通。

是否有另一種方法可以嘗試關閉/重新啓動日誌記錄,同時支持File,Memory和Ado appenders?

+0

當你說「重置日誌」,你只是想文件被清除爲空? –

+0

我想要創建一個新文件...但我的FileAppender工作得很好。 MemoryAppender在調用Shutdown後似乎沒有記錄任何事件,並嘗試使用ActivateOptions重新啓動。 – Dave

+0

我還應該補充一點,AdoNetAppender也適用。爲了實現這個功能,我調用Shutdown,然後重命名s3db文件,然後用原始文件名複製一個新的「開始」s3db文件。有趣的是,對於AdoNetAppender,我不會在任何地方調用ActivateOptions - 它只是奇蹟般地工作。 – Dave

回答

1

我想你不想通過調用Shutdown方法來得到你想要的。只需在appender上設置一個新的文件名稱,然後致電ActivateOptions。這將關閉舊的日誌文件,並打開新的日誌文件...

+0

我一直在改變我的評論...... :)好的,我會試試這個建議。希望它也適用於AdoNetAppender。 – Dave

+0

謝謝!這完全是訣竅。重置日誌時,我不再調用關機,並且MemoryAppender可以工作。我只是更改文件名併爲FileAppender調用ActivateOptions。對於AdoNetAppenders,我對它們調用Close(),移動舊的s3db文件,然後調用ActivateOptions並生成一個新的日誌數據庫。完善! – Dave