java - 抛出异常与日志记录

标签 java exception logging try-catch

下面的编码方式是好的做法吗?

try {
    //my code here
} catch (Exception e) {
    logger.error("Some error ", e);
    throw new MyCustomException("Some error ", e);
}

而且,我应该……

  • 只使用记录器?
  • 只抛出异常?
  • 两者都做?

我知道使用 throw 我可以在调用堆栈的另一部分捕获异常,但也许额外的日志记录有一些隐藏的好处并且也很有用。

最佳答案

通常,我认为您应该记录 重新抛出。两者都做只会导致每一层一次又一次地记录异常,这使得日志难以阅读。更糟糕的是,很难弄清楚您实际上有多少错误 - 是七个错误,还是记录了相同错误的应用程序的七个层?

这意味着如果您抑制异常,您将记录它并说明您认为不值得重新抛出的原因。

另一方面,如果你重新抛出异常,你知道它要么被捕获并被抑制(在这种情况下,捕获器记录异常以及它被抑制的原因),或者它会从您的应用程序中冒出并被应用程序容器捕获,该容器将捕获并记录异常。每个异常在日志中只显示一次。

关于java - 抛出异常与日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22072343/

相关文章:

java - 拦截 URL 和过滤器

java - php解析json到android时显示空

c++ - 日志记录设施和 Qt

python - 在 Python 守护进程中维护日志记录和/或 stdout/stderr

java - 在java代码中从wsdl调用web服务

java - vaadin & Spring 启动 : compiled widgetset is missed in jar package

c++ - IBPP/Firebird 客户端的 VC++ 异常处理在 x86 和 x64 上不同

scala - Exception和Throwable类之间有什么区别?

c# - 如何防止因未设置模拟对象的期望而导致吞咽异常?

java - Log4J:我可以在运行时启用/禁用类的日志记录吗?