[英]Multiple instances of same process logging on different files
我正在嘗試使用同一計划進程的多個實例登錄到多個文件,並且根據運行時參數選擇了目標文件。
這里的問題是,當一個實例在運行時,其他任何實例都無法登錄,僅生成空文件。
這是一個示例方案:
program.exe A
啟動並開始記錄到A_{currentDate}.log
program.exe B
在program.exe A
仍在運行時啟動,並應開始記錄到B_{currentDate}.log
當它們都結束時,第二個文件為空,而第一個文件為空,這不是預期的結果,因為我100%確信第二個實例有日志要記錄。 基本上看起來,第一個要運行的實例可以阻止所有其他實例登錄,這是唯一可以執行此操作的實例。
鑒於我們為同一程序安排了約20個預定任務,這會導致很多問題,因為我們缺少一些重要的日志。
這是log4net.config
文件的一個片段:
<appender name="A_appender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="A_%property{Date}.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<appender name="B_appender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="B_%property{Date}.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
...
<logger name="A.Logger">
<appender-ref ref="A_appender" />
<level value="DEBUG" />
</logger>
<logger name="B.Logger">
<appender-ref ref="B_appender" />
<level value="DEBUG" />
</logger>
...
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
</root>
這是每個實例的初始化代碼:
protected Module(string logName)
{
ThreadContext.Properties["Date"] = GlobalContext.Properties["Date"] = DateTime.Now.ToString("yyyyMMdd");
XmlConfigurator.Configure(new System.IO.FileInfo(properties.get("log4net.config.file")));
log = LogManager.GetLogger(logName);
...
}
有人可以幫我嗎?
在我看來,您的兩個進程都試圖同時打開兩個文件(附加程序A和附加程序B),因此無論哪個先啟動,都會阻止第二個進程運行。 您可能只抓住了要使用的一個或另一個附加程序的引用,但是即使僅記錄到您抓住的那個附加程序,它也會創建它們兩者。
您可能需要為每個唯一的進程設置第二個GlobalContext屬性,並將其包含在文件名中,因為聽起來兩個進程都在同一日期運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.