我有一个应用程序(自主托管ASP.Net WebAPI的控制台应用程序)作为其设置的一部分调用XmlConfigurator.Configure()
。如果我的配置文件缺少log4net配置节,为什么我的应用程序会挂起?
它工作正常,如果我的应用程序的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:无法在应用程序的.config文件中找到配置节'log4net'”输出到控制台)。
我做错了什么,或者我偶然发现了log4net中的一个错误?
我已经对此进行了广泛的调试。有两种行为:
- 调用
XmlConfigurator.Configure()
无限期挂起,当我跨过它 - 调用
XmlConfigurator.Configure()
能跨过,但随后的应用似乎挂起。如果我暂停执行并查看活动线程,则有一个卡在log4net方法中(类似ConfigureFromFile
)。
无论哪种方式,它挂起了整个应用程序。
下面是从挂起线程的堆栈跟踪(在上面的第二种情况):
如果单步执行代码会发生什么? – Default
它可能不是log4net中的错误,它可能是MS配置解析器。 –
您同意这是一个错误。在这种情况下,它可能会弹出一些静态构造函数,不可能让你捕捉。 –