Log4net随机停止日志记录。

Log4net随机停止日志记录。,log4net,Log4net,我目前正在使用log4net构建一个ASP.Net-MVC应用程序来进行日志记录,但日志记录程序似乎只是随意停止。它将愉快地记录一段时间,然后停止,然后在一段时间后重新开始。我甚至不知道是什么让它恢复日志记录。我所说的不仅仅是丢失几条信息——有时它会出现很长一段时间,比如一个小时左右 为什么会这样停下来又开始?我应该如何正确配置它,使它不会像它那样随机停止 以下是我的配置: Log4Net将在出现问题且无法向其附加程序写入数据时运行。这实际上是一件好事,因为这意味着一点失败的日志记录不会导致

我目前正在使用log4net构建一个ASP.Net-MVC应用程序来进行日志记录,但日志记录程序似乎只是随意停止。它将愉快地记录一段时间,然后停止,然后在一段时间后重新开始。我甚至不知道是什么让它恢复日志记录。我所说的不仅仅是丢失几条信息——有时它会出现很长一段时间,比如一个小时左右

为什么会这样停下来又开始?我应该如何正确配置它,使它不会像它那样随机停止

以下是我的配置:


Log4Net将在出现问题且无法向其附加程序写入数据时运行。这实际上是一件好事,因为这意味着一点失败的日志记录不会导致一个健康的系统崩溃,但当某些东西没有按照您的预期进行日志记录时,这可能会让人恼火

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

因此,在应用程序的配置文件中添加:


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


...
...

要将其捕获到文件中。

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


阅读此处:

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

[程序集:log4net.Config.XmlConfigurator(Watch=true)]


这反过来又导致log4net停止了日志记录…

在与log4net斗争了一段时间后,我发现它会完全停止日志记录。不管我怎么做,我都无法让它恢复工作。当您没有在前几行代码中初始化日志时,似乎存在一些问题,但是模糊的指示不足以让日志在另一个程序加载的dll中可靠地工作,等等

我也从未激活过内部日志

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

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


在我的例子中,是重置日志记录(重新配置日志记录,而不是设计…)导致了此类问题-如果您找到了原因,是否介意添加一个答案或注释来解释导致问题的原因?是的,如Mark所说,知道问题的原因会很好。顺便说一下,我也遇到了同样的问题,在ADONetAppender配置下将ReconnectError设置为true对我来说很有效。为了调试,我在一个模块中添加了XmlConfigurator.Configure,它失败了,因为应用程序已经从另一个配置文件配置了它的记录器。当然,你不能相信你不理解的东西。IMO Log4net非常复杂,要完成您可以使用它做的事情。复杂性通常是灵活性的反映。顺便说一句,内部日志非常有用。您有这样一个配置文件的更完整示例吗?我已经尝试了许多变体,并且不断从XmlSerializationReader中得到XML错误。即使只是一个空的
标记也是异常与否的区别。我也有同样的问题,在我的情况下,似乎每当我打开一个标准文件对话框,图标覆盖DLL会用自己的日志覆盖进程中的log4net.config。这实际上不是一件好事,因为可能会有依赖于它的系统监视和错误通知工具,如果它停止记录,我们就无法知道发生了异常。讨厌这个蹩脚的测井工具,无论我去哪家公司,无论使用哪种版本,它总是让人头疼。蹩脚的开发者的蹩脚产品。。