Я пытаюсь войти в систему с исключениями 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 в первом методе без регистрации Исключения. Например:
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
.
То, что я хотел, чтобы каждый раз, когда он достиг уловки, не пересоздавая новое исключение, Elmah регистрировал бы исключение. Это связано с тем, что у меня есть много блоков try-catch в моем приложении, и я хочу регистрировать эти исключения без ручного входа в каждый try-catch. Однако, если вы скажете мне, как я могу зарегистрировать исключение из SecondMethod
, это будет нормально.