我们前面的章节都是记录用户自定义的内容,其实Log4net还可以记录异常信息,还可以把异常堆栈都记录进去,方便我们程序员排查问题。
try
{
int b = 0;
int a = 100 / b;
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
}Code language: PHP (php)
- 触发异常:
100 / b,变量b=0,会抛出DivideByZeroException除零异常。 - 捕获异常:
catch (Exception ex)捕获所有派生自Exception的异常。 - 日志关键写法:
log.Error(ex.Message, ex);- 第一个参数:自定义日志消息(这里传入异常简短描述
ex.Message) - 第二个参数必须传入异常对象
ex - log4net 识别到第二个参数是
Exception实例时,自动打印完整堆栈信息(StackTrace),包含出错代码位置、调用链。
- 第一个参数:自定义日志消息(这里传入异常简短描述
错误写法(无法打印堆栈)
// 只传字符串,丢失堆栈!
log.Error(ex.ToString());
log.Error(ex.Message);Code language: JavaScript (javascript)
这种方式只会输出异常文本,部分日志输出格式不会自动展开调用堆栈,排查困难。
推荐规范写法
// 推荐:增加业务描述,再传入异常对象
log.Error("执行除法运算发生错误", ex);Code language: JavaScript (javascript)
Previous: 独立配置文件