Log4net停止写入事件日志

时间:2012-06-27 16:59:32

标签: c# .net log4net

我的应用程序使用Log4net写入事件查看器。这是我程序的App.config文件的log4net部分:

<log4net>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
        <applicationName value="CarSystem" />
        <logName value="CarSystemLog" />
        <threshold value="DEBUG" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="EventLogAppender" />
    </root>
</log4net> 

现在,这些设置工作正常,直到前天下午12:30左右。突然,(当我需要查看日志中的消息时),它停止写入日志文件。

自定义事件日志位于查看器中。我今天重新启动了这台机器,但仍然没有新的东西进入日志。我将最大日志大小增加到10880 KB。

为什么log4net不再写入我的日志文件?

2 个答案:

答案 0 :(得分:11)

而不是寻找解决方案,更好地找到原因。

我建议您启用log4net的内部调试日志记录到文件(任何文件),它会在那里转储它的麻烦。当我的日志文件(事件日志应该是相同的东西)没有显示时,我已经多次使用过这个。

有关如何配置here的说明。

快速步骤:

  • 将此添加到您的app.config:
 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
     <appSettings>
         <add key="log4net.Internal.Debug" value="true"/>
     </appSettings>
 </configuration>
  • 也将此添加到配置(configuration部分)。
 <system.diagnostics>
    <trace autoflush="true">
        <listeners>
              <add 
              name="textWriterTraceListener" 
              type="System.Diagnostics.TextWriterTraceListener" 
              initializeData="C:\tmp\log4net.txt" />
        </listeners>
    </trace>
 </system.diagnostics>

任何有权限或其他问题都会记录到跟踪文件中。

答案 1 :(得分:2)

我回到Log4Net文档并注意到这句话:

  

必须在应用程序启动期间尽早进行日志记录调用,当然在加载和调用任何外部程序集之前。

好吧,我在AssemblyInfo.cs中有XmlConfiguration属性,在代码中调用了LogManager.GetLogger,但是在调用后我已经添加到我的WPF应用程序的构造函数{ {1}}对象。我意识到在我阅读此声明并审阅代码后添加此调用后,日志记录停止了。

所以我将调用移动到App成为LogManager.GetLogger构造函数中的第一个语句,并再次开始记录。 Hallelieuia!

感谢您的帮助和建议。