Log4net没有记录异常

时间:2015-02-09 23:34:59

标签: c# log4net

我已成功为我的C#应用​​程序设置了log4net。一切正常,除非我这样做:

catch (Exception ex)
{
    if (log.IsErrorEnabled)
       log.Error("test", ex);
}

我得到的只是信息" test",我根本没有得到例外。然后,当我这样做时:

catch (Exception ex)
{
    if (log.IsErrorEnabled)
       log.Error(ex);
}

我根据需要获得异常,堆栈跟踪和所有内容。这很有效,但理想情况下,我希望同时拥有消息和异常。

为什么完全相同的代码(没有配置更改)在第一个示例中不起作用,但在第二个示例中却起作用?我在阅读Error()方法的文档错误吗?

3 个答案:

答案 0 :(得分:2)

您正在使用的第一个重载是您想要的重载:Error(string, Exception)。如果实际写入异常取决于您的appender和/或您选择的布局。下面介绍如何禁用堆栈跟踪的打印:https://stackoverflow.com/a/3660529/106567

我需要查看您的配置,以便说明为什么不打印异常。

“工作”的代码实际上并不是你应该做的:log.Error(ex)似乎做你想要的,因为log4net将异常视为消息对象,只是在其上调用toString()。任何专门处理异常的appender / layout都无法正确处理异常。如果您使用ErrorFormat重载之一(实际上我从未完全理解,为什么您不能同时使用格式化字符串和异常),也会发生同样的情况。

答案 1 :(得分:1)

解决方案与我发布的代码无关,但我没有正确修复标记。最终解决方案已在this stack overflow post

中找到

答案 2 :(得分:0)

尝试

log.ErrorFormat("test: {0}", ex);