Я пытаюсь войти с исключениями Эльма, обработанных в try...catch
блоках.Ошибки журнала, обработанные в try..catch с Elmah
Я добавил глобального фильтра ошибки ручки на 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()
внутри улова внутреннего метода, он не регистрирует исключение, он возвращается к улову в первом методе без регистрации Исключения. Например:
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();
}
}
Исключение брошенной SecondMethod
не будучи протоколируется Elmah. Он возвращается к основному методу catch. Если основной метод catch также имеет код throw new Exception()
, он регистрирует исключение. Однако он будет регистрироваться с трассировкой стека, указывающей на MainMethod
, а не на SecondMethod
.
Что я хотел, чтобы каждый раз, когда он доходил до улова, не пересовывая новое исключение, Элма заверил бы исключение. Это связано с тем, что у меня есть много блоков try-catch в моем приложении, и я хочу регистрировать эти исключения без ручного входа в каждый try-catch. Однако, если вы скажете мне, как я могу зарегистрировать исключение из SecondMethod
, все будет в порядке.