我想使用ELMAH记录异常(而不是将其全部抛到调用堆栈),并记录整个调用堆栈。
示例代码:
(我可以通过遍历StackTrace的每个帧来获取行号和源文件详细信息)。
但是,我该如何将此注入异常或引发具有此调用堆栈详细信息的新异常?有没有一种优雅的方法来做到这一点?我是否忽略了什么非常明显的东西?
示例代码:
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()。我希望能够看到完整的调用堆栈。
以下是在LogException方法中ex.StackTrace的示例:
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的每个帧来获取行号和源文件详细信息)。
但是,我该如何将此注入异常或引发具有此调用堆栈详细信息的新异常?有没有一种优雅的方法来做到这一点?我是否忽略了什么非常明显的东西?