c# – 每次在进程中调用XmlConfigurator.Configure()时,log4net如何不清除日志

在我的应用程序中,我包含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(),日志消息也会附加在文件末尾.

点赞