使用Log4Net记录InnerException

时间:2010-03-09 15:14:38

标签: .net logging log4net

如何使用Log4NET记录内部异常?

这是我目前的转换模式:

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

4 个答案:

答案 0 :(得分:11)

Console和File Appender会自动打印异常。例外:消息,堆栈跟踪和所有内部异常(再次使用堆栈跟踪)记录在单独的行上,并且不遵循转换模式。

我甚至不确定你是否可以配置log4net来打印它。

更新的 可以将appender配置为不打印stacktrace: Log4Net - Logging out the Exception stacktrace only for certain files

答案 1 :(得分:10)

  
    

%例外

         

日志条目中异常对象的格式化形式,如果条目包含异常;否则,此格式表达式不会向日志条目添加任何内容

  

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

我相信你的异常将包含内部异常:

编辑:使用ILog.Error()方法而不是ILog.ErrorFormat()。根据{{​​3}},ErrorFormat()不会将Exception对象包含在日志事件中

答案 2 :(得分:2)

经过一些快速的谷歌搜索后,我找到了其他人a similar problem。 FreddyGómez的解决方案是:

  

您可以实现渲染器(类   它实现了接口   IObjectRenderer)您的例外情况   并提供您想要的信息   例外。然后,你只需要   添加一个元素   到配置文件。

答案 3 :(得分:-1)

只是设法在Log4Net 2.0版的源代码中验证这一点,我可以看到没有考虑记录InnerException。这是Log4Net(版本2)的当前限制,它不支持开箱即用的InnerException渲染。这就是为什么你会开始使用NLog,因为它内置了对InnerException渲染的支持 - link