Log4net随机停止记录.

Jac*_*amy 31 log4net

我目前正在使用log4net构建一个ASP.Net-MVC应用程序进行日志记录,但是记录器似乎只是随机停止.它会愉快地记录一段时间,然后停止,然后在一段时间后再次启动.我甚至不确定是什么让它恢复记录.我不是在谈论丢失的一些消息 - 有时它会消失很长一段时间,比如一个小时左右.

为什么会这样停下来开始?我应该如何正确配置它,以便它不会随意停止?

这是我的配置:

<log4net debug="true">
<appender name="RollingLogFileAppender"
        type="log4net.Appender.RollingFileAppender">

  <file value="..\Logs\\CurrentLog.txt" />
  <appendToFile value="true" />
  <datePattern value="yyyyMMdd" />

  <rollingStyle value="Date" />
  <filter type="log4net.Filter.LevelRangeFilter">
    <acceptOnMatch value="true" />

    <levelMin value="INFO" />
    <levelMax value="FATAL" />
  </filter>

  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern
    value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>

</appender>

<root>
  <level value="INFO" />
  <appender-ref ref="RollingLogFileAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)

Alc*_*nja 58

如果出现问题并且无法写入其appender,Log4Net将无声地失败.这实际上是一件好事,因为它意味着一些失败的日志记录不会降低一个健康的系统,但是当一些东西没有像你期望的那样记录时,它会很烦人.

你最好的办法是打开log4net自己的内部日志记录来做一些诊断,并(希望)找出它失败的原因.

所以在你的应用程序的配置文件中添加:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这将打开发送到的内部日志记录System.Diagnostics.Trace,因此您可以添加:

<configuration>
    ...
    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add 
                    name="textWriterTraceListener" 
                    type="System.Diagnostics.TextWriterTraceListener" 
                    initializeData="C:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>
    ...
</configuration>
Run Code Online (Sandbox Code Playgroud)

将其捕获到文件中.

  • 您是否有此类配置文件的完整示例?我已经尝试了多种变体,并且不断从XmlSerializationReader中获取XML错误。即使只是一个空的&lt;appSettings&gt;标签,也是异常与否之间的区别。 (2认同)