logger系统异常日志打印问题

原创  郑建华   2020-03-17   90人阅读  0 条评论
摘要:

    记录系统错误日志,是用来排查错误的一种有效手段,根据错误的堆栈信息,我们能很快的定位到错误点,从而直接解决问题。但是有时候错误的日志记录方式,则很难达到这个效果,反而浪费了很多时间。    因为系统错误日志的问题带来了很多麻烦,所以特定梳理了一下关于记录日志的几个问题。1、程序关键位置,未做异常处理。比如页面跳转时,做了其他操作,未进行try catch处理,一旦其中抛出异常,则该次请求则会停止响应。界面上的表现为:页面跳转一片

    记录系统错误日志,是用来排查错误的一种有效手段,根据错误的堆栈信息,我们能很快的定位到错误点,从而直接解决问题。但是有时候错误的日志记录方式,则很难达到这个效果,反而浪费了很多时间。

    因为系统错误日志的问题带来了很多麻烦,所以特定梳理了一下关于记录日志的几个问题。

1、程序关键位置,未做异常处理。

比如页面跳转时,做了其他操作,未进行try catch处理,一旦其中抛出异常,则该次请求则会停止响应。

界面上的表现为:

页面跳转一片空白

image.png

前端显示请求返回500错误码

image.png

原因是代码中未做异常捕获,直接将异常抛出给主程序了

image.png

如果是控制台启动应用,则还能看到错误信息

image.png

如果是使用服务启动的,错误信息无从找起

要么换成控制台启动,要么还原现场环境到本地排查 效率极其低下,浪费不少时间。

2、进行了异常捕获处理,但是在catch中仅使用了e.printStackTrace();

这种情况和情况一类似,e.printStackTrace()是将错误的堆栈信息打印到控制台,所以排查错误必须要有控制台。

3、使用了log4j记录日志,采用了logger.error(e)、logger(e.getMessage())方式

这种情况下,两种方法都不能够打印完整的错误堆栈信息

需要使用logger("错误:",e)的方式才可行

根据方法重载特性,当只输入一个参数时,此对象会被当做Object进行打印输出,如果是Exception e的话,这里直接就toString()。

1
2
3
4
5
6
void error(Object message);

根据方法重载特性,当第二个参数为Throwable时,会打印出异常信息,并且包含异常堆栈信息。

1
2
3
4
5
6
7
8
void error(String message, Throwable t);  

根据方法重载特性,当第二个参数为Object时,会根据占位符进行替换并打印出错误日志。

1
2
3
4
5
6
7
void error(String message, Object p0);



本文地址:https://www.zjh336.cn/?id=292
版权声明:本文为原创文章,版权归 郑建华 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?