2

我的应用程序使用 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 不再写入我的日志文件?

4

2 回答 2

11

Rather than looking for a solution, better find the cause.

I suggest you enable log4net's internal debug logging to file (any file) and it will dump it's troubles there. I've used this many times when my log files (should be same thing for Event Log) didn't show up.

Instructions on how to configure it here.

Quick steps:

  • Add this to your app.config:
 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
     <appSettings>
         <add key="log4net.Internal.Debug" value="true"/>
     </appSettings>
 </configuration>
  • Add this too to the config (configuration section).
 <system.diagnostics>
    <trace autoflush="true">
        <listeners>
              <add 
              name="textWriterTraceListener" 
              type="System.Diagnostics.TextWriterTraceListener" 
              initializeData="C:\tmp\log4net.txt" />
        </listeners>
    </trace>
 </system.diagnostics>

Any issues with permissions or whatever will then be logged to the trace file.

于 2012-06-27T17:17:33.207 回答
2

我回到 Log4Net 文档并注意到以下声明:

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

好吧,我在 AssemblyInfo.cs 中有 XmlConfiguration 属性并LogManager.GetLogger在代码中调用了对,但它是在调用启动监视对象之后,我已添加到我的 WPF 应用程序App对象的构造函数中。当我阅读此语句并查看代码时,我意识到添加此调用后日志记录停止了。

因此,我将调用移至构造函数LogManager.GetLogger中的第一个语句,App然后再次开始记录。哈利路亚!

感谢您的帮助和建议。

于 2012-07-06T20:52:43.897 回答