我花了很长时间来追踪Log4Net配置问题,其中数据库连接字符串不正确,因为在代码中调用XmlConfigurator.Configure()时,而不是抛出异常它只是挂起。
如果我已经意识到它会立即挂在特定的代码行上,那么很容易弄明白,但是我正在调用一个使用log4net的行为的wcf服务,当然它在开发环境但不在登台环境中,因此需要更长时间才能跟踪。
它真的困扰我,它只是挂起而不是抛出一个关于登录不工作的例外。这是log4net中的某种错误吗?
答案 0 :(得分:2)
不,这不是错误,而是documented behaviour:
log4net是尽力而为的故障停止日志记录系统。
通过失败停止,我们的意思是log4net不会引发意外 运行时的异常可能导致应用程序崩溃。 如果由于任何原因,log4net抛出未捕获的异常,请发送 发送电子邮件至log4net-users@lists.sourceforge.net邮件列表。 未捕获的异常被视为需要立即执行的严重错误 注意。
如果您想检查配置是否有效,the documentation suggests code like this:
为了防止log4net的静默失败,log4net支持一种方法 评估它是否已配置,还评估生成的消息 从1.2.11开始启动。检查log4net是否已启动和 配置正确,可以检查属性 log4net.Repository.ILoggerRepository.Configured并枚举 配置消息如下:
if(!log4net.LogManager.GetRepository().Configured)
{
// log4net not configured
foreach(log4net.Util.LogLog message in
log4net.LogManager.GetRepository()
.ConfigurationMessages
.Cast<log4net.Util.LogLog())
{
// evaluate configuration message
}
}