2

我在 Java 应用程序中使用公共日志,我想从堆栈跟踪中记录异常。

catch( Exception exception ) {
         logger.error( "FailedCreateActivityFunction Exception Occured : " , exception );
         throw new EngineException( getMessage( ERROR_FailedCreateActivityFunction, FunctionName ), exception );
      }

这会引发两次异常吗?如果是,如何解决?

使用+ 异常而不是, 异常以这种方式使用它有什么区别

logger.error( "FailedCreateActivityFunction Exception Occured : " + exception );
4

2 回答 2

4

不,它不会两次抛出异常。此代码将仅抛出 EngineException。

你应该避免记录和抛出异常,只做一件事。Log and throw 是一种反模式。您可以在此处阅读有关异常处理的更多信息:异常处理反模式

这两种执行错误方法的方法之间的区别是:

  • 在 logger.error(String msg, Throwable t) - 你传递对象,所以日志框架有更多信息,并且可以显示完整的堆栈跟踪
  • 在 logger.error(String msg) - 你创建字符串,没有额外的信息传递给日志框架
于 2012-12-28T10:19:16.960 回答
1

不,它不会扔两次。

一种方法将打印您的消息和异常的堆栈跟踪。

第二种方法将仅打印您的消息和异常消息(调用 throwable.toString() ,返回错误的简短描述),没有堆栈跟踪。

于 2012-12-28T10:10:52.207 回答