2012-12-17 177 views
2

我想編寫異常的methodname,classname,filename,linenumber。我如何實現這一點?我嘗試了下面的代碼,將Exception傳遞給在文本文件中寫入msg的函數。獲取異常詳細信息

string msg = ""; 
StackTrace st = new StackTrace(ex); 
var frame=st.GetFrame(0);   
msg = @"Message : " + ex.Message + " \n FileName: " + frame.GetFileName() + " \n Method Name : " + frame.GetMethod() + "\n Line Number : " + frame.GetFileLineNumber()+"\n Class Name :"+frame.GetMethod().DeclaringType; 

日誌寫入文件,如下

Message: Message : Attempted to divide by zero. 
FileName: 
Method Name : Void Page_Load(System.Object, System.EventArgs) 
Line Number : 0 
Class Name :RequestsView 

爲什麼FileName缺失和LineNumber顯示0,即使它出現在頁面上的其他行。如果有的話,請建議更正代碼。

+3

嘗試打印所有幀的信息,而不僅僅是第0幀。 –

+0

Windows事件日誌? –

+1

請檢查[StackTrace文件名未知](http://stackoverflow.com/questions/1650253/stacktrace-filename-unknown)問題的答案。 – andrewpey

回答

2

只需使用拋出的異常Exception.StackTrace屬性來獲取所有信息,你需要

0

爲什麼嘗試推倒重來?幹。 NLog提供了這種功能,並且更加直接的開箱即用。

0

使用此行來得到你想要的細節..

INT LINENUMBER =新System.Diagnostics.StackTrace(例如,真).GetFrame(0).GetFileLineNumber(); className = new System.Diagnostics.StackTrace(ex,true).GetFrame(0).GetFileName(); methodName = new System.Diagnostics.StackTrace(ex,true).GetFrame(0).GetMethod()。Name;