Log4net随机停止记录。

时间:2010-02-14 23:29:44

标签: 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>

4 个答案:

答案 0 :(得分:57)

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

最好的办法是打开log4net自己的internal logging进行一些诊断,并(希望)找出失败的原因。

所以在你的app的配置文件中添加:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

将打开内部日志记录,并将其发送到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>

将其捕获到文件中。

答案 1 :(得分:1)

尽早在应用程序生命周期中发送测试日志消息,只需要一个简单的LogManager.GetLogger("Init").Info("Starting logging")即可。如果其他一些引用的代码首先开始记录,那么初始化过程的一部分可能会失败(因为它从另一个程序集加载设置,它只执行一次)。

请在此处阅读:https://logging.apache.org/log4net/release/faq.html#first-log

答案 2 :(得分:0)

还要检查是否仍在AssemblyInfo.cs文件中配置了log4net。在我的情况下,签到导致在此文件中删除以下行:

[assembly:log4net.Config.XmlConfigurator(Watch = true)]

这又导致log4net停止记录...

答案 3 :(得分:0)

在与Log4Net纠缠了一段时间之后,我发现它将完全停止记录。不管我尝试了什么,我都无法将其恢复正常工作。似乎在您未在代码的前几行中初始化日志时会出现问题,但是模糊指示不足以使我可靠地使日志在另一个程序加载的dll中工作,依此类推。

我也从未设法激活内部日志。

我最终决定创建一个专用的dll,我的程序可以调用该dll以使用Log4Net可靠地创建日志。 dll仅执行此操作,创建日志的代码被隔离,并且永不更改。我认为通过这种方式,我将能够可靠地创建日志文件并将其写入。到目前为止,这种方法已经解决了我花费了无数令人沮丧的时间进行登录的问题。

我在此SO线程上发布了代码:

stackoverflow.com/questions/308436/log4net-programmatically-specify-multiple-loggers-with-multiple-file-appenders