我有一个应用程序(控制台应用程序,自托管ASP.Net WebAPI),它在设置过程中调用 XmlConfigurator.Configure()
。
如果我的应用程序的 app.config
文件像这样:
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
</log4net>
</configuration>
如果我删除空的
<log4net>
元素,它就会挂起:<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
)。
无论哪种情况,都会使整个应用程序挂起。
以下是来自挂起线程的堆栈跟踪(以上述第二种情况为例):