Log4net 不记录异常

Log4net not logging exception

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

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

我得到的只是消息 "test",我根本没有收到异常。然后,当我这样做时:

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

我得到了所需的异常、堆栈跟踪和所有内容。这行得通,但理想情况下我希望同时拥有消息和异常。

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

尝试

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

您正在使用的第一个重载是您想要的重载:Error(string, Exception)。是否实际写入异常取决于您的附加程序和/或您选择的布局。这里解释了如何禁用堆栈跟踪的打印:

我需要查看您的配置,以便了解为什么未打印异常。

"works" 的代码实际上不是您应该做的:log.Error(ex) 似乎可以做您想要的,因为 log4net 将异常视为消息对象并简单地对其调用 toString()。任何专门处理异常的附加程序/布局都无法正确处理异常。如果您使用 ErrorFormat 重载之一,也会发生同样的情况(实际上我一直不太明白,为什么不能同时使用格式化字符串和异常)。

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

中找到