我知道我可以使用Log4Net将异常记录到数据库中,但我希望将分解存储的异常分别存储到不同的列中。
有没有人知道这是否可用,是否有人这样做了,或者只是手动将异常记录到数据库更容易?
干杯 安东尼
更新:
如果有帮助,可以使用以下内容:
也许格式的改变会有所帮助。
答案 0 :(得分:2)
如果您不想使用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;
}
}
答案 1 :(得分:2)
根据要求,您可以使用此处列出的方法:Log4Net available database fields for adoappender - seems there are a few more i.e. 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}" />
值得测试/研究以确定这是否是线程安全的(名称暗示它是,但它不会伤害检查)。您还需要确保后续日志不会在其消息中包含此数据(即,确保它已被清除)。
(标记为维基,因为这不是我的答案,只是在Mitch's回答的评论中收集各种信息和讨论)。
答案 2 :(得分:2)
ELMAH是一个很棒的选择。鲜为人知的图书馆是CuttingEdge.Logging。就像ELMAH一样,它允许将异常类型,消息和堆栈跟踪记录到数据库中的表中。
答案 3 :(得分:-1)
使用AdoNetAppender Class或不符合您需求的,编写您自己的custom Appender。