Я хочу использовать ELMAH, чтобы регистрировать исключение (не бросая его полностью вверх по стеку вызовов), и он регистрирует весь стек вызовов.Как регистрировать исключение с полным стеком вызовов?
Пример кода:
protected void Page_Load(object sender, EventArgs e)
{
DoSomething();
}
private void DoSomething()
{
try { TrySomething(); }
catch (Exception ex) { LogException(ex); }
}
private void TrySomething()
{
throw new NotImplementedException();
}
public static void LogException(Exception ex)
{
var currentStack = new System.Diagnostics.StackTrace(true);
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}
Теперь, в рамках метода LogException я могу видеть стек вызовов, говоря мне DoSomething() под названием TrySomething(), и бросил исключение, но я не могу видеть вызов стек показывает мне Page_Load(), называемый DoSomething(). Я хочу видеть полный стек вызовов.
Пример того, что ex.StackTrace выглядит внутри метода LogException:
at WebApplication1._Default.TrySomething() in C:\Projects\test\GeneralTests\WebApplication1\Default.aspx.cs:line 26
at WebApplication1._Default.DoSomething() in C:\Projects\test\GeneralTests\WebApplication1\Default.aspx.cs:line 20
я могу получить полный стек вызовов из System.Diagnostics.StackTrace(), например:
at WebApplication1._Default.LogException(Exception ex)
at WebApplication1._Default.DoSomething()
at WebApplication1._Default.Page_Load(Object sender, EventArgs e)
[snip]
(и я могу получить номера строк и исходные данные файла, прогуливая каждый кадр StackTrace)
Но как я вставляю это в исключение или создаю новое исключение с помощью этого стека вызовов de хвост? Есть ли элегантный способ сделать это? Я пропустил что-то действительно очевидное ?!
проверить эти ответы на вопросы, связанные с, которые обеспечивают лучшее понимание того, почему вы не получите полный стек вызовов: http://stackoverflow.com/a/6094700/945456 и http://stackoverflow.com/a/24297684/945456 –