[英]Log4Net Logging Exceptions
我知道我可以使用Log4Net将异常记录到数据库中,但是我想将异常存储在数据库中的内容分解到不同的列中。
是否有人知道这是否可用,是否有人这样做或将异常手动记录到数据库更容易?
干杯安东尼
更新:
如果有帮助,可以使用以下方法:
也许格式上的更改会有所帮助。
如果您不想使用ELMAH之类的东西 ,可以通过重写Page.ProcessRequest来捕获所有异常(一种狡猾的方式,因为它仅被标记为仅用于基础结构,因此可以捕获所有异常)
public override void ProcessRequest(HttpContext context)
{
try
{
base.ProcessRequest(context);
}
catch (Exception e)
{
log.ErrorFormat(e.Message); // Log exception message, or
log.ErrorFormat(e.ToString()); // Log stack trace
throw;
}
}
根据要求,您可以使用此处概述的方法: Log4Net adoappender的可用数据库字段-似乎还有更多方法,例如method_name? 在log4net ThreadContext
使用自定义属性,以可能的方式将有关异常的此额外信息保存为以下内容:
public void LogDetailedException (LogLevel level, string message, Exception exception)
{
log4net.ThreadContext.Properties["exceptionType"] = exception.GetType().AssemblyQualifiedName;
// appropriate logging statement
log4net.ThreadContent.Properties.Remove("exceptionType"); // clear it, so it's not used in future calls
}
然后按照您的模式:
<conversionPattern value="%property{exceptionType}" />
值得测试/研究一下这是否是线程安全的(名称暗示它是线程安全的,但检查起来不会受到伤害)。 您还需要确保后续日志不在其消息中包含此数据(即,确保已清除)。
(标记为Wiki,因为这不是我的具体答案,只是有关Mitch答案的评论中的各种信息和讨论的集合)。
ELMAH是一个不错的选择。 鲜为人知的库是CuttingEdge.Logging 。 与ELMAH一样,它允许将异常类型,消息和堆栈跟踪记录到数据库中的表中。
使用AdoNetAppender类 ,或者使用不满足您需求的类,编写您自己的自定义Appender 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.