我想使用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方法中,我可以看到調用堆棧告訴我叫TrySomething()DoSomething的(),並拋出異常,但我不能看到通話顯示給我的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的每一幀來獲得行號和源文件的詳細信息)
但是,如何將此注入Exception或使用此調用堆棧提升新Exception尾巴?有沒有一個優雅的方式來做到這一點?我錯過了一些非常明顯的東西?!
查閱這些在提供爲什麼你沒有得到充分調用堆棧有一個更好的瞭解相關問題的答案: http://stackoverflow.com/a/6094700/945456和http://stackoverflow.com/a/24297684/945456 – 2016-07-14 19:04:32