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

时间:2013-06-21 06:44:29

标签: c# .net 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次:

  
      
  • 在init应用程序时调用 - &gt;我写日志。
  •   
  • 启动Quartz时调用。 (我验证了何时阅读源代码Common.Logging.log4net) - &gt; Quartz写日志。
  •   

Quartz启动后,由于XmlConfigurator.Configure(),我的日志被清除了。这意味着在调用此命令时,将清除日志。我不想在此过程中名为的命令后清除我的日志。

我可以获取源dll Common.Logging.log4net来更改代码以检查log4net是否真的已配置,如果没有则调用XmlConfigurator.Configure()。但我不喜欢这个解决方案。

请帮我找到DLL库中没有更改代码的其他解决方案。

更多信息:http://neilkilbride.blogspot.com/2008/04/configure-log4net-only-once.html

1 个答案:

答案 0 :(得分:2)

您已配置文件追加器在重新配置log4net时创建新的日志文件:

 <appendToFile value="false" />

将其更改为:

 <appendToFile value="true" />

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