我正在嘗試使用在try...catch
塊中處理的Elmah異常進行日誌記錄。在與Elmah try..catch處理的日誌異常
我加入了一個全球性的處理錯誤過濾器上Global.axax
:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ElmahHandledErrorLoggerFilter());
filters.Add(new HandleErrorAttribute());
}
這是我ElmahHandledErrorLoggerFilter
:
public class ElmahHandledErrorLoggerFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
if (context.ExceptionHandled)
ErrorSignal.FromCurrentContext().Raise(context.Exception);
}
}
它只會記錄異常,如try{ ... }catch{ throw new Exception(); }
。但這不是問題,問題是我有一個try-catch方法,這個方法已經在另一個try-catch內部的代碼中調用。在這種情況下,儘管我將throw new Exception()
放入內部方法的catch中,但它不會記錄異常,但它會返回到第一個方法中的catch而不記錄Exception。例如:
public void MainMethod()
{
try
{
SecondMethod();
}
catch
{
....second method jump here.....
}
}
public void SecondMethod()
{
try
{
int a =0;
int b =;
int result = b/a;
}
catch
{
throw new Exception();
}
}
Elmah沒有記錄SecondMethod
引發的異常。它回到主要的方法捕獲。如果主方法catch還有throw new Exception()
代碼,則它會記錄該異常。但是,它將使用指向MainMethod
而不是SecondMethod
的堆棧跟蹤進行記錄。
我想要什麼,每次它在沒有重新拋出新異常的情況下達到捕獲時,Elmah都會記錄異常。這是因爲我的應用程序中有很多try-catch塊,我想記錄這些異常而無需手動記錄每個try-catch。但是,如果你告訴我如何從SecondMethod
登錄例外情況,那很好。