我花了很长时间来跟踪Log4Net配置问题,其中数据库连接字符串不正确,因为当XmlConfigurator.Configure()在代码中调用时,而不是抛出异常,它只是挂起。
如果我意识到它挂在特定的代码行上,那么很快就会发现它,但是我调用了一个使用log4net行为的wcf服务,当然它在开发环境中是正确配置的,但在staging环境中不是,所以需要更长的时间来跟踪。
它真的让我很困扰,它只是挂起,而不是抛出一个关于登录不工作的异常。这是log4net的某种bug吗?
不,这不是一个bug,这是记录的行为:
log4net是一个尽最大努力和故障停止的日志系统。
通过fail-stop,我们的意思是log4net不会抛出意外的错误运行时的异常可能导致应用程序崩溃。如果由于任何原因,log4net抛出了一个未捕获的异常,请发送发邮件到log4net-users@lists.sourceforge.net邮件列表。未捕获的异常作为需要立即处理的严重错误处理注意。
如果你想检查你的配置是否有效,文档建议这样写:
为了防止log4net静默故障,log4net支持一种方法评估是否配置了它,并评估生成的消息从1.2.11开始启动。检查log4net是否已启动正确配置可以检查属性log4net.Repository.ILoggerRepository。配置并枚举配置信息如下:
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
}
}