如何讓異常處理應用程序塊(EHAB)從日誌中的Exception.Data屬性寫入值?EntLib日誌中缺少Exception.Data信息
try
{
// ...
}
catch (Exception ex)
{
ex.Data.Add("Hello", "World");
throw ex;
}
異常記錄正確,但我無法在由EHAB創建的日誌條目中的任何位置找到添加的數據。
據我所知,這是一個推薦的做法,添加額外的相關信息的例外本身就像上面的例子。這就是爲什麼我有點驚訝,EHAB默認不包括這個。
我可以通過使用EntLib文本格式化程序模板編輯器(下面的屏幕截圖)修改模板來解決此問題嗎?我找不到有關提供的各種「代幣」的任何信息,但我認爲答案隱藏在他們的某處。
Text Formatter Template Editor http://img195.imageshack.us/img195/6614/capturegmg.png
或者我真的需要實現自己的自定義文本格式化做到這一點?
編輯/ UPDATE:
我爲了避免到處添加HandleException方法調用在我的代碼做這在我的Global.asax.cs:
using EntLib = Microsoft.Practices.EnterpriseLibrary;
using System;
namespace MyApp
{
public class Global : System.Web.HttpApplication
{
protected void Application_Error(object sender, EventArgs e)
{
// I have an "All Exceptions" policy in place...
EntLib.ExceptionHandling.ExceptionPolicy.HandleException(Server.GetLastError(), "All Exceptions");
// I believe it's the GetLastError that's somehow returning a "lessor" exception
}
}
}
原來這是不一樣的(這工作得很好,而且基本上解決了我的問題):
try
{
// ...
}
catch (Exception ex)
{
ex.Data.Add("Hello", "World");
bool rethrow = ExceptionPolicy.HandleException(ex, "Log Only Policy");
throw ex;
}
通過所有的代碼,並添加try-catch的HandleException調用似乎......好吧,愚蠢的。 我想我的問題真的是如何使用正確的EHAB,而不是配置。
任何關於我如何才能的建議在ASP.NET Web應用程序的「全局級別」上記錄所有異常?
我同意HandleException:作爲一個框架,「if rethrow」構造並不真正提供很多抽象;你仍然需要在每個catch塊中添加「if rethrow」代碼。 – 2009-08-18 15:32:26