Log4net 有点太擅长不抛出错误了。我正在尝试创建某种处理程序,如果 log4net 无法启动或死亡并且无法再记录,则会触发该处理程序。
我知道应用程序设置键可以打开 log4net 的内部调试 (log4net.Internal.Debug)。不过,只要 log4net 出现问题,我并不总是需要所有调试信息。
有没有人有办法以编程方式捕获和处理 log4net 中的错误?
可能对您有用的是创建一个实现的类错误处理程序 http://logging.apache.org/log4net/release/sdk/log4net.Core.IErrorHandler.html对于每个附加程序,然后配置每个附加程序以使用自定义错误处理类。与启用 log4net.Internal.Debug 相比,这应该为您提供更多的控制权。
我刚刚尝试过并且它有效(请注意,在我的示例中Logger
是在其他地方定义的 log4net 记录器 - 其背后的目的是捕获来自 SMTP 附加程序的错误并将其记录到文件中):
using System;
using log4net.Core;
namespace Test
{
public class SmtpErrorHandler : IErrorHandler
{
public void Error(string message)
{
Logger.Log.Error(message);
}
public void Error(string message, Exception ex)
{
Logger.Log.Error(message, ex);
}
public void Error(string message, Exception ex, ErrorCode errorCode)
{
Logger.Log.Error(String.Format("{0}{1}Error code: {2}", message, Environment.NewLine, errorCode), ex);
}
}
}
我在哪里配置我的附加程序(当然你也可以在配置中执行此操作):
emailAppender.ErrorHandler = new SmtpErrorHandler();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)