论坛首页 Java企业应用论坛

一个异常应该在一个log文件里面出现一次且只有一次

浏览 5519 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-13   最后修改:2010-11-13
系统报了一堆异常,吓人一跳,看了看,发现有一个异常在同一个文件中,打了多次的情况。
比如A->B,B->C,C系统有一个异常,打到了error.log中,然后又向上抛,B捕获了这个异常,打到了error.log中,又向上抛,C系统捕获了这个异常,打到了error.log中。

感觉这种记录异常的方式是不合理的。

当时这么做的思路是所有的异常打在一个文件里面,方便排查故障。

但是这种一个root cause的异常在同一个文件打多次应该是不必要的。

传统的做法是一个异常只打一次log,但是这个只是一个理想情况,我的想法是,一个系统对于同一个root cause的异常只应该记录一次。

以上面的例子为例,C把异常打到c.error.log中,抛出去,B把异常打到b.error.log中,抛出去,A把异常打到a.error.log中。同时,所有的异常应该保留异常堆栈,这样,不论是在A还是B还是C都可以看到这个异常的真正的root cause。
   发表时间:2010-11-14  
用logback貌似就可以实现
0 请登录后投票
   发表时间:2010-11-15  
这个不是什么技术问题吧。

1,异常从C抛到B,再从B抛到A,A的异常堆栈信息能保存相应的信息。
2,C,B不能处理异常为什么要捕获。

很简单的方法,B,C直接抛出,只在A捕获,打印异常信息即可。

捕获异常的奥义:谁有能力处理谁捕获。

你懂的。
0 请登录后投票
   发表时间:2010-11-15  
我觉得这个问题的关键是,系统在哪个层面上拦截/处理异常?
从设计上说,层层往上抛异常,层层记录,却不处理,这样的设计有缺陷的。

底层的异常应该对上层屏蔽,外部API调用可能得到一个false或者null的结果,但不是异常本身。
0 请登录后投票
   发表时间:2010-11-15  
如果声明抛出异常,就不应该记录也不应该捕获
0 请登录后投票
   发表时间:2010-11-15  
runtimeexception
只打二次.
0 请登录后投票
   发表时间:2010-11-15  
我觉得应该处理这个错误,让它下次不出错,
而不是处理这个log,让它出现而不显示,真正狼来了就倒霉了,呵呵
0 请登录后投票
   发表时间:2010-11-15  
楼主 你真要是 “C把异常打到c.error.log中,抛出去,B把异常打到b.error.log中,抛出去,A把异常打到a.error.log中”

调试程序的时候 会累死
得看 N个 log文件
0 请登录后投票
   发表时间:2010-11-15  
xixix2004 写道
这个不是什么技术问题吧。

1,异常从C抛到B,再从B抛到A,A的异常堆栈信息能保存相应的信息。
2,C,B不能处理异常为什么要捕获。

很简单的方法,B,C直接抛出,只在A捕获,打印异常信息即可。

捕获异常的奥义:谁有能力处理谁捕获。

你懂的。


有些第3方库,就是捕获,打log,再抛出。这个我控制不了的。
0 请登录后投票
   发表时间:2010-11-15  
linliangyi2007 写道
我觉得这个问题的关键是,系统在哪个层面上拦截/处理异常?
从设计上说,层层往上抛异常,层层记录,却不处理,这样的设计有缺陷的。

底层的异常应该对上层屏蔽,外部API调用可能得到一个false或者null的结果,但不是异常本身。


这个情况太理想,而且也是可以商量的,异常吞没返回一个null或者false,未必是一个好的实践。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics