2012-02-16 155 views

回答

0

只是try ... catchexception並給予例外到測井方法:

try 
{ 
    // ... code that throws exception 
} 
catch (Exeption ex) 
{ 
    myLogger.Error(ex); 
} 

此重載隱式調用,打印調用堆棧到您的日誌異常的ToString()方法。

7

有兩種基本形式,即需要一個對象,一個異常明確:

catch(Exception ex) 
{ 
    // the form that takes two args has an exception as second, prints trace... 
    _log.Error("My custom message", ex); 
} 

,而另一種的任何對象,並對其進行ToString()

catch(Exception ex) 
{ 
    // the form that takes one arg uses ToString() 
    _log.Error(ex); 
} 

前者允許您首先在日誌條目上添加更有意義的消息,以提供您需要的任何其他詳細信息。後者將做的工作,但只有使用ToString()將異常細節,它給你:

的ToString的默認實現獲取類 拋出當前異常的消息,稱結果的名稱 ToString的內部異常,以及調用 Environment.StackTrace的結果。如果這些成員中的任何一個是Nothing,則其值 不包含在返回的字符串中。

13

您需要確保佈局模式的定義能夠輸出您想要的格式和數據。

log4Net Pattern Layout

用於輸出記錄事件堆棧跟蹤電平符可以括號之間被包圍的堆棧跟蹤。例如,%stacktrace {level}。如果沒有堆棧跟蹤級指定符給出然後1假定

輸出使用格式:type3.MethodCall3> type2.MethodCall2> type1.MethodCall1

這種模式不適用於精簡框架組件。

20

使用此:

void Error(object message,Exception t) 

原因是log4net的文檔中的void Error(object message)

警告注意,傳遞一個例外,此方法將打印異常的名字,但沒有堆棧跟蹤。要打印堆棧跟蹤,請改爲使用void Error(object,Exception)表單。

Error(object message, Exception t)是登錄異常數據的最靈活的方式,因爲它去作爲例外,而不是對象以及可以在追加程序用於縮小日誌到特定異常類(而不是通過搜索一個字符串,它是非常緩慢,而且不太一致)

還有的是需要消息和異常的所有非格式測井方法特別版本:

namespace log4net 
{ 
    public interface ILog 
    { 
     ... 
     /* Log a message object and exception */ 
     void Debug(object message, Exception t); 
     void Info(object message, Exception t); 
     void Warn(object message, Exception t); 
     void Error(object message, Exception t); 
     void Fatal(object message, Exception t); 
     ... 
    } 
} 
0

您可以通過擴展器ILOG到有記錄只是一個異常的方法了堆棧跟蹤。

public static void ErrorWithStackTrace(this ILog log, Exception exception) 
{ 
    log.Error(exception.Message,exception); 
    }