上周上线的时候,测试的同学发现一个bug,对应的开发同学不在现场,于是让我帮忙解决

检查代码,查看错误日志,他的日志打印方式为:

这种方式只能打印出具体错误信息,但是打印不出堆栈信息,不方便定位问题
同时又因为是线上环境,不能随便重启,导致排查困难,只能用arthas一步步排查

问题解决了,但正确的打印错误日志的方式应该是什么呢?
对于日志打印,我们一般有三种写法:
catch(Exception e){
logger.error("[第一种:逗号] 测试错误堆栈到日志文件",e);
logger.error("[第二种:加号] 这里是测试错误信息列表"+e);
logger.error("第三种:错误异常"+e.getmessage);
}

情况一:完整打印出了堆栈信息
情况二:仅仅打印了测试错误信息列表
情况三:只打印了具体错误名称

我们来看看log4j的error方法:
/**

  • Log an exception (throwable) at the ERROR level with an
  • accompanying message.
  • @param msg the message accompanying the exception
  • @param t the exception (throwable) to log
    */
    public void error(String msg, Throwable t);
    所以对于异常,是不需要占位符的,而且也不需要e.getMessage(),直接把异常放进去就可以;
    如果使用加号:
    就相当于字符串拼接

正确的打印方式为: