[英]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.