精华帖 (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。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-11-14
用logback貌似就可以实现
|
|
返回顶楼 | |
发表时间:2010-11-15
这个不是什么技术问题吧。
1,异常从C抛到B,再从B抛到A,A的异常堆栈信息能保存相应的信息。 2,C,B不能处理异常为什么要捕获。 很简单的方法,B,C直接抛出,只在A捕获,打印异常信息即可。 捕获异常的奥义:谁有能力处理谁捕获。 你懂的。 |
|
返回顶楼 | |
发表时间:2010-11-15
我觉得这个问题的关键是,系统在哪个层面上拦截/处理异常?
从设计上说,层层往上抛异常,层层记录,却不处理,这样的设计有缺陷的。 底层的异常应该对上层屏蔽,外部API调用可能得到一个false或者null的结果,但不是异常本身。 |
|
返回顶楼 | |
发表时间:2010-11-15
如果声明抛出异常,就不应该记录也不应该捕获
|
|
返回顶楼 | |
发表时间:2010-11-15
runtimeexception
只打二次. |
|
返回顶楼 | |
发表时间:2010-11-15
我觉得应该处理这个错误,让它下次不出错,
而不是处理这个log,让它出现而不显示,真正狼来了就倒霉了,呵呵 |
|
返回顶楼 | |
发表时间:2010-11-15
楼主 你真要是 “C把异常打到c.error.log中,抛出去,B把异常打到b.error.log中,抛出去,A把异常打到a.error.log中”
调试程序的时候 会累死 得看 N个 log文件 |
|
返回顶楼 | |
发表时间:2010-11-15
xixix2004 写道 这个不是什么技术问题吧。
1,异常从C抛到B,再从B抛到A,A的异常堆栈信息能保存相应的信息。 2,C,B不能处理异常为什么要捕获。 很简单的方法,B,C直接抛出,只在A捕获,打印异常信息即可。 捕获异常的奥义:谁有能力处理谁捕获。 你懂的。 有些第3方库,就是捕获,打log,再抛出。这个我控制不了的。 |
|
返回顶楼 | |
发表时间:2010-11-15
linliangyi2007 写道 我觉得这个问题的关键是,系统在哪个层面上拦截/处理异常?
从设计上说,层层往上抛异常,层层记录,却不处理,这样的设计有缺陷的。 底层的异常应该对上层屏蔽,外部API调用可能得到一个false或者null的结果,但不是异常本身。 这个情况太理想,而且也是可以商量的,异常吞没返回一个null或者false,未必是一个好的实践。 |
|
返回顶楼 | |