2010-03-09 82 views
9

如何使用Log4NET記錄內部異常?使用Log4Net記錄InnerException

這是我目前的轉換模式:

<conversionPattern value="%date [%appdomain] %-5level %logger [%property{NDC}] - %message%newline" /> 
+1

剛一說明:http://logging.apache.org/log4net/release/sdk/log4net.NDC.html NDC已被棄用。我已經成功地使用了'log4net.ThreadContext.Properties [「propertyName」]''。您的轉換模式可能類似於'%property {propertyName}' 參考:http://logging.apache.org/log4net/release/sdk/log4net.NDC.html – ram 2010-03-09 15:29:12

回答

7

控制檯和文件附加目的地自動打印例外。異常情況:消息,堆棧跟蹤和所有內部異常(再次使用堆棧跟蹤)都記錄在單獨的行中,並且不遵循轉換模式。

我甚至不確定您是否可以配置log4net不打印它。

更新: 這是可以配置的appender不打印堆棧跟蹤: Log4Net - Logging out the Exception stacktrace only for certain files

+0

您好Stefan,您能指點我一個相關進入SDK確認你的答案? – Raj 2010-03-09 15:43:04

+0

我沒有讀到這個地方。當我使用log4net時,這是我在日誌文件或控制檯中看到的內容。內部例外總是打印。 – 2010-03-09 16:54:58

+1

我不知道爲什麼,但我在我的日誌文件中看到的東西正好相反 - 內部異常根本沒有記錄。 – VikciaR 2012-04-25 13:13:13

1

一些快速google搜索後,我發現別人誰了a similar problem。弗雷迪·戈麥斯的解決方案是:

您可以實現一個渲染器(A類 它實現了接口 IObjectRenderer)爲您的異常 ,把你想了解 異常的信息。然後,你只需要 添加一個元素 到配置文件。

+0

我引用的同一線程中的其他解決方案包括解析異常並在消息本身中包含額外的信息。 2010-03-09 15:25:14

9

%例外

在日誌條目中的異常對象的格式化形式,如果該條目包含一個異常;否則,這種格式的表達沒有增加任何的日誌條目

參考:http://www.beefycode.com/post/Log4Net-Tutorial-pt-4-Layouts-and-Patterns.aspx

我相信你的異常將包含內部異常:

編輯:使用ILog.Error()方法而不是ILog.ErrorFormat()。根據documentation,ErrorFormat()不會將Exception對象包含在日誌事件中

+0

+1表示ErrorFormat不會引發異常。這就是我需要的。 – 2014-10-28 18:43:47

-1

只是設法在源代碼中驗證Log4Net版本2.0,我可以看到沒有考慮記錄InnerException。這是Log4Net(版本2)的當前侷限性,即它不支持開箱即用地呈現InnerException。這就是爲什麼,因爲它已經內置了的InnerException呈現支持,你會開始使用NLOG - link