导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:356
阅读量:1648382
访问量:205665
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
博文->>首页 博主的更多博文>>
使用error打印异常日志注意
Tags : 日志,异常,slf4j发表时间: 2018-03-29 22:02:38
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
比如: 转自:Su的技术博客  原文地址:

1、在项目代码里发现打印异常日志这样的代码不少


    logger.error("{}出现异常", msg, exception);


结果:业务X出现异常。

        是不是异常堆栈信息都没看到。

2、有什么问题?

1)打印error异常堆栈的时候,是不能使用占位符替换;

2)打印error使用了参数占位替换之后,不能再使用异常e参数。

3、正确的姿势

又要打印业务参数,也要打印异常堆栈信息,正确的姿势应该就是上面这样的。

4、正确的引入Logger

 别引入其它的Logger包。比如:org.apache.logging.log4j;等

正确的做法是引入slf4j的包org.slf4j.Logger

为什么要用slf4j-api这个包,因为它使用门面Facade 的方式提供了统一的API接口,第三方实现都是根据它来做的,所以也能很好的兼容。

5、总结:

1)正确的引入Logger,slf4j-api包里的;

2)正确的使用error打印异常堆栈日志。

 

--------------------------------------更正一下--------------------------------------

1、出现以上占位符和异常打印不出来是slf4j-api 1.6版本之前,1.6(包含)之后是正常的。

原因如下:

  1)1.6以前1.5.10的代码:

所以异常堆栈不会被打印出来。

2)1.6(包含)之后的代码:


所以1.6之后的版本已经支持,不过很清楚的看出,你的异常throwable需要放置在最后的位置才行。


2、再次总结:

1)使用1.6以前的版本,记得使用String.format先把异常信息格式化,再调用logger.error(msg,e);打印出异常堆栈;

2)使用1.6之后包含1.6版本的,可以不用跟上面一样,不过得注意throwable放在最后的位置,不然会被当做对象参数直接被打印。



PS:有什么不对的地方请指出!


打赏
打赏
关注公众号
公众号
类别:Java| 阅读(5987)| 赞 (0)
上一篇 : SpringBoot热部署:spring-boot-de
下一篇: 【zk源码】0-ZooKeeper介绍
评论
暂无评论!
发表评论
昵  称:

验证码:

内  容:

    同时赞一个 赞

推荐文章