记录异常信息

我们前面的章节都是记录用户自定义的内容,其实Log4net还可以记录异常信息,还可以把异常堆栈都记录进去,方便我们程序员排查问题。

try
{
    int b = 0;
    int a = 100 / b;
}
catch (Exception ex)
{
    log.Error(ex.Message, ex);
}Code language: PHP (php)
  1. 触发异常100 / b,变量b=0,会抛出 DivideByZeroException 除零异常。
  2. 捕获异常catch (Exception ex) 捕获所有派生自Exception的异常。
  3. 日志关键写法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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注