【发布时间】:2012-09-28 13:01:39
【问题描述】:
我有一个应用程序(一个自托管 ASP.Net WebAPI 的控制台应用程序)调用 XmlConfigurator.Configure() 作为其设置的一部分。
如果我的应用程序的 app.config 文件如下所示,它可以正常工作:
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
</log4net>
</configuration>
如果我取出空的@987654327@ 元素,它会挂起:
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
</configuration>
在过去使用 log4net 时,我在其他任何地方都没有看到过这种行为(它通常只是将消息“log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file.”放到控制台)。
我做错了什么,还是我偶然发现了 log4net 中的错误?
我已经对此进行了广泛的调试。有两种行为:
- 对
XmlConfigurator.Configure()的调用在我越过它时无限期挂起 - 可以跳过对
XmlConfigurator.Configure()的调用,但随后应用程序似乎挂起。如果我暂停执行并查看活动线程,就会发现有一个卡在 log4net 方法中(类似于ConfigureFromFile)。
无论哪种方式,它都会挂起整个应用程序。
这是来自挂起线程的堆栈跟踪(在上面的第二种情况下):
【问题讨论】:
-
单步执行代码会发生什么?
-
这可能不是 log4net 中的错误,它可能是 MS 配置解析器。
-
您同意这是一个错误。在这种情况下,它可能会在一些静态构造函数中弹出,你无法捕捉到。
-
看来您的 log4net 配置设置设置错误..我将发布一个示例,说明我的 log4net 工作版本目前在我的企业 Web 应用程序上如何为我工作
-
挂起很容易诊断。 Debug + Break All 并查看调用堆栈。如果这没有帮助,请将其发布在您的问题中。顺便说一句,NLog 是更好的端口。