0
我正在嘗試使用同一個計劃進程的多個實例登錄到多個文件,並且根據運行時參數選擇了目標文件。在不同文件上記錄同一進程的多個實例
這裏的問題是,當一個實例正在運行時,沒有其他人能夠記錄,只產生空文件。
下面是一個示例場景:
- 的schedlued任務
program.exe A
啓動並開始記錄到A_{currentDate}.log
- 的schedlued任務
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);
...
}
有人可以幫我嗎?
根據你的建議,我最終從我的配置中除去了一個appender。這個appender現在寫入'%property {FileName} _%property {Date} .log'之類的東西,這樣可以阻止所有文件被單個實例鎖定。 – STT