在我的应用程序中,我包含 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 次:
- 在初始化应用程序时调用 -> 我写日志。
- 启动 Quartz 时调用。(我验证了何时读取Common.Logging.log4net源代码)-> Quartz写日志。
Quartz 启动后,由于 XmlConfigurator.Configure(),我的日志被清除了。这意味着当调用该命令时,日志将被清除。我不希望在进程中调用此命令后清除我的日志。
我可以获取源 dll Common.Logging.log4net 来更改代码以检查 log4net 是否真的已配置,如果没有则调用 XmlConfigurator.Configure()。但我不喜欢这个解决方案。
请帮助我找到另一种解决方案,而无需更改 DLL 库中的代码。
更多信息: http: //neilkilbride.blogspot.com/2008/04/configure-log4net-only-once.html