4

在我的应用程序中,我包含 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

4

1 回答 1

2

您已配置文件附加程序在重新配置 log4net 时创建一个新的日志文件:

 <appendToFile value="false" />

将其更改为:

 <appendToFile value="true" />

即使您XmlConfigurator.Configure()多次调用,日志消息也会附加在文件末尾。

于 2013-06-21T09:22:55.043 回答