簡體   English   中英

具有多線程代碼執行的Log4Net C#日志記錄問題

[英]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的事情,這很奇怪。

  1. 有時會生成日志文件,但沒有消息內容。
  2. 有時文件本身沒有生成。
  3. 有時幾個文件生成,很少生成。

請你告訴我為什么Log4Net會像這樣。 我需要使用多線程代碼執行的穩定日志記錄。

提前致謝!

我實際上並沒有嘗試做你正在做的事情,但我可以看到你的代碼有兩個問題,這會導致問題。 (我不希望日志信息丟失,但我希望信息轉到錯誤的文件)。

首先,如果期望在不同的線程上更改屬性,則應該使用ThreadContext而不是GlobalContext。 這個問題很容易解決。

第二個問題可能更成問題。 Log4net不希望在程序執行期間更改基本文件名,即使您更改了屬性,也可能繼續寫入舊文件名。

解決此問題的最簡單方法之一是重新初始化記錄器。 如果您使用app.config中的xml配置,則可以調用log4net.Config.XmlConfigurator.Configure(); 在您設置了您的財產之后。 這顯然有一個開銷,你必須決定這個開銷是否可以接受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM