在我的应用程序中,我包含3个库:
Log4net
Common.Logging.log4net
Quartz (use Common.Logging.log4net to write logs)
这是我的log4net部分配置:
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="quartz.log" />
<appendToFile value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
一切都很好,但有关于XmlConfigurator.Configure()的问题.按顺序调用此命令2次:
- Called when init application -> I write log.
- Called when starting Quartz. (I verified when to read source codes Common.Logging.log4net) -> Quartz write log.
Quartz启动后,由于XmlConfigurator.Configure(),我的日志被清除了.这意味着在调用此命令时,将清除日志.我不希望在进程中调用此命令后清除我的日志.
我可以获取源dll Common.Logging.log4net来更改代码以检查log4net是否真的已配置,如果没有则调用XmlConfigurator.Configure().但我不喜欢这个解决方案.
请帮我找到DLL库中没有更改代码的另一种解决方案.
更多信息:http://neilkilbride.blogspot.com/2008/04/configure-log4net-only-once.html
解决方法:
您已配置文件appender在重新配置log4net时创建新的日志文件:
<appendToFile value="false" />
将其更改为:
<appendToFile value="true" />
即使您多次调用XmlConfigurator.Configure(),日志消息也会附加在文件末尾.