如何在停止记录时对log4net进行故障排除

时间:2009-03-24 14:28:01

标签: log4net

似乎Log4Net因为不明显的原因而无声地关闭,我不知道如何排除故障。我的预感是特定的appender在特定的日志消息上失败,并且似乎关闭了整个堆栈。

有没有办法让Log4Net抛出一个异常(至少在我们的调试阶段),而不是暂时关闭服务。

3 个答案:

答案 0 :(得分:24)

扩展上一个答案 -

要为log4net.Internal.Debug跟踪添加跟踪侦听器,请将其添加到您的应用配置中:

  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add
            name="textWriterTraceListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="c:\temp\log4net.txt" />
      </listeners>
    </trace>
  </system.diagnostics>

将上面的initializeData属性值替换为所需的日志文件路径。确保应用程序或ASP.NET服务器进程有权写入此文件。

您可以做的另一件事是检查启动时从log4net配置返回的消息。从log4net 1.2.11版开始,XmlConfigurator.Configure()方法返回一个ICollection,其中包含列出配置过程中遇到的问题的字符串。

所以,如果你有这样的东西:

XmlConfigurator.Configure();

将其更改为

ICollection configMessages = XmlConfigurator.Configure();

并在调试器中检查configMessages,或在某处打印出来,例如

foreach (string msg in configMessages)
{
   Console.WriteLine(msg);
}

如果所有其他方法都失败了,请下载log4net源代码,将项目添加到解决方案中,然后引用项目而不是log4net.dll。现在您可以进入调试器中的log4net调用。

答案 1 :(得分:15)

我认为您可以在app.config / web.config的appSettings部分添加一个配置值,以打开log4net中的内部调试语句:

<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

这将让您深入了解log4net可能吞咽的任何错误。

答案 2 :(得分:0)

我很难搞清楚文件日志和sql日志附加程序无法正常工作的原因。我更改了默认的SQL表,结果是数据类型Int不好,Int32是正确的值。在我在Visual Studio中调试并进入日志记录方法之前,我似乎无法找到此信息。我的断点暂停了该方法的执行,并在立即窗口中运行了setup命令:

log4net.Config.XmlConfigurator.Configure()

我能够看到即时反馈,并且在配置代码运行时实际上发生了异常抛出。它显示在立即窗口中,我能够解决这个问题。

希望这有助于某人。

相关问题