在 Java 中记录异常?

Deb*_*Das 2 java logging apache-commons

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

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

这会抛出异常两次吗?如果是的话如何解决?

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

logger.error( "FailedCreateActivityFunction Exception Occured : " + exception );
Run Code Online (Sandbox Code Playgroud)

mle*_*zey 5

不,它不会抛出异常两次。这段代码只会抛出 EngineException。

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

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

  • 在 logger.error(String msg, Throwable t) 中 - 您传递对象,因此日志记录框架具有更多信息,并且可以向您显示完整的堆栈跟踪
  • 在 logger.error(String msg) - 您创建字符串,没有附加信息传递到日志记录框架

  • 您通常应该使用`,异常`方式。据我所知,当您以这种方式使用它时,所有好的日志记录框架都会将堆栈跟踪推送到记录器。 (3认同)