2

有些书提到跟随模式不好。它说每个异常如果被重新抛出不应该记录它以避免重复异常日志。?还有其他问题吗?

我很困惑,如果我在重新抛出异常时无法记录任何异常,是否存在问题?

或者如果我记录它,如果每个人都这样做会生成太多日志,我会感到困惑。

catch (NoUserException e) { 

    LOG.error("No user available", e); 

    throw new UserServiceException("No user available", e); 

} 

参考 http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html#logAndThrow

4

3 回答 3

2

我不确定你提到的书,但对我来说,作为一个必须调试代码并找到错误根本原因的人,我想稍后在尽可能接近的日志中阅读它到它第一次触发的地方。

于 2012-08-16T06:27:10.520 回答
0

每个 LOG 函数都有一个开关来禁用该日志消息,因此如果出现意外情况,您必须记录所有异常。如果您预期该异常,例如您检查字符串是否为数字并且您想知道异常的结果,那么您不需要执行 Log。

于 2012-08-16T06:28:00.213 回答
0

就异常而言,最重要的日志消息应该位于服务层。重要的是保留整个堆栈跟踪,以便即使在多次重新抛出后也可以轻松定位问题。您始终可以将日志放在所有层中并操作某些层的日志记录级别,以仅查看您当前正在调试/工作的层的日志。其他日志可以设置为关闭。阅读您最喜欢的记录器的文档以了解更多信息。

于 2012-08-16T06:31:28.103 回答