似乎Log4Net由于不明显的原因默默地关闭了,我不知道如何解决它。我的预感是特定的附加程序在特定的日志消息上失败,并且似乎关闭了整个堆栈。
有没有办法让 Log4Net 抛出异常(至少在我们的调试阶段)而不是悄悄关闭服务。
似乎Log4Net由于不明显的原因默默地关闭了,我不知道如何解决它。我的预感是特定的附加程序在特定的日志消息上失败,并且似乎关闭了整个堆栈。
有没有办法让 Log4Net 抛出异常(至少在我们的调试阶段)而不是悄悄关闭服务。
扩展上一个答案 -
要为 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 调用。
我认为您可以在 app.config/web.config 的 appSettings 部分中设置一个配置值,以打开 log4net 中的内部调试语句:
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
这将使您对 log4net 可能吞下的任何错误有一些了解。
我很难弄清楚为什么文件日志和 sql 日志附加程序不起作用。我更改了默认的 SQL 表,结果发现数据类型 Int 不好,而 Int32 是正确的值。在我在 Visual Studio 中调试并进入日志记录方法之前,我似乎无法找到这些信息。该方法的执行在我的断点处暂停,我在即时窗口中运行了 setup 命令:
log4net.Config.XmlConfigurator.Configure()
我能够立即看到反馈,并且实际上在该配置代码运行时引发了异常。它显示在即时窗口中,我能够解决这个问题。
希望这可以帮助某人。