在Java中记录异常?

在Java中记录异常?,java,logging,apache-commons,Java,Logging,Apache Commons,我正在Java应用程序中使用commons日志记录,我想从堆栈跟踪记录异常 catch( Exception exception ) { logger.error( "FailedCreateActivityFunction Exception Occured : " , exception ); throw new EngineException( getMessage( ERROR_FailedCreateActivityFunction, Functio

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

catch( Exception exception ) {
         logger.error( "FailedCreateActivityFunction Exception Occured : " , exception );
         throw new EngineException( getMessage( ERROR_FailedCreateActivityFunction, FunctionName ), exception );
      }
这会引发两次异常吗?如果是,如何修复?

以这种方式使用它与使用+exception而不是、exception有什么区别

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

不,它不会扔两次

将打印您的消息和异常的堆栈跟踪


将只打印您的消息和异常消息(调用throwable.toString()that),而不打印stacktrace。

否它不会两次抛出异常。此代码将仅引发EngineeException

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

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

  • 在logger.error(String msg,Throwable t)中,传递对象,所以日志框架有更多信息,可以显示完整的堆栈跟踪
  • 在logger.error(String msg)-您创建字符串时,不会向日志框架传递任何附加信息

在java文档“public void error(Object message,Throwable t)”中可以看到使用+exception而不是exception的区别。错误函数只能接受message或message+Throwable。您是否可以指定在这种情况下应使用哪种方式
+exception
,exception
?是否有其他方法将堆栈跟踪推送到记录器?您通常应该使用
,exception
方法。据我所知,所有好的日志框架都在以这种方式使用时将堆栈跟踪推送到记录器。