2010-03-09 85 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