[英]Log4Net C# logging issue with multi-thread code execution
我正在使用Log4Net
在我的.Net Windows service
應用程序中記錄異常。
我想提一下,我的Windows服務應用程序運行multi-threading execution
,這意味着每個任務都在每個不同的線程上處理,我使用了Delegate - (BeginInvoke)
模式。
重要的是,我使用dynamic properties
根據應用程序的不同場景使用Log4Net
動態生成多個日志文件。
現在,在每個logging/ exception
場景中(在C#方法中),我使用Logger.Log
方法使用Log4Net
記錄信息/異常。
GlobalContext.Properties[FileNameParameter] = DirectoryName + fileName;
LogManager.Info(logMessage);
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\Data\%property{FileName}_info.log"/>
</appender>
問題是(我相信),由於多線程代碼執行,我正在跟蹤Log4Net的事情,這很奇怪。
請你告訴我為什么Log4Net會像這樣。 我需要使用多線程代碼執行的穩定日志記錄。
提前致謝!
我實際上並沒有嘗試做你正在做的事情,但我可以看到你的代碼有兩個問題,這會導致問題。 (我不希望日志信息丟失,但我希望信息轉到錯誤的文件)。
首先,如果期望在不同的線程上更改屬性,則應該使用ThreadContext而不是GlobalContext。 這個問題很容易解決。
第二個問題可能更成問題。 Log4net不希望在程序執行期間更改基本文件名,即使您更改了屬性,也可能繼續寫入舊文件名。
解決此問題的最簡單方法之一是重新初始化記錄器。 如果您使用app.config中的xml配置,則可以調用log4net.Config.XmlConfigurator.Configure();
在您設置了您的財產之后。 這顯然有一個開銷,你必須決定這個開銷是否可以接受。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.