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