在Java中使用commons.Logging记录异常?

在Java中使用commons.Logging记录异常?,java,logging,apache-commons-logging,Java,Logging,Apache Commons Logging,我正在Java应用程序中使用commons日志记录,我想从堆栈跟踪记录异常 catch( IOException exception ) { logger.error( "IOException Occured :", exception.fillInStackTrace() ); //Print the entire stack trace to log file. throw new AsExceptionUtl( APPMessageHelper.g

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

 catch( IOException exception ) {
    logger.error( "IOException Occured :", exception.fillInStackTrace() ); 

       //Print the entire stack trace to log file.
      throw new AsExceptionUtl( APPMessageHelper.getMessage( APPMessageConstants.ERROR_FailedLoadFile, documentPath ) );
   }

这条路对吗?它会在日志中打印stacktrace吗?

如果要记录异常,只需使用

logger.error("IOException Occured :", exception); 

是否显示堆栈跟踪取决于底层日志实现是什么以及如何配置。好吧,默认情况下,大多数或所有实现都会显示异常的堆栈跟踪。

Apache commons日志记录解释:internet上没有多少关于此的文档。这是一篇有益于您的小文章:

为了在java代码中记录消息,需要将两个类导入到源代码中

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
现在,要创建日志,请使用以下两种方法之一在类中创建属性:

   private Log m_log = LogFactory.getLog(MyClass.class);

第一个选项只是为类创建一个通用记录器,它将由默认的日志选项控制。 第二个选项是创建一个名为“MyClassLogger”的特定记录器,该记录器可以单独控制为默认值。如果您使用其他使用日志记录的第三方源代码,但不希望看到该源代码中的调试或其他信息,则可能需要执行此操作。 使用记录器非常简单。您可以通过调用与优先级对应的方法来发送日志消息:

m_log.fatal(Object message);
m_log.fatal(Object message, Throwable t);
m_log.error(Object message);
m_log.error(Object message, Throwable t);
m_log.warn(Object message);
m_log.warn(Object message, Throwable t);
m_log.info(Object message);
m_log.info(Object message, Throwable t);
m_log.debug(Object message);
m_log.debug(Object message, Throwable t);
m_log.trace(Object message);
m_log.trace(Object message, Throwable t);
这些方法按优先级从高到低的顺序列出。默认情况下,Commons logging设置为显示来自INFO和更高版本的所有消息。如您所见,每个方法都重载了一个方法,您可以在其中发送一个可丢弃的类型,例如异常——非常方便! 这就是记录消息所要做的一切

在您的情况下,您只需要使用:

  logger.error("IOException Occured :", exception); 

无需调用stackTrace,因为这里的异常对象将被记录并引发异常。

+1堆栈跟踪是根据需要填写的,我想不出明确调用它的好理由,除非您想更改堆栈跟踪(我在我的一个库中做过,但这通常是一个好主意:)@peter lawrey@jb nizet那么在我的情况下,
exception.fillInStackTrace()
会做什么呢?什么都没有,因为Throwable的构造函数已经调用了fillInStackTrace()。默认情况下,堆栈跟踪在那里。不用担心。以这种方式记录异常并不一定要记录异常的堆栈跟踪,它可以将消息放入日志中,例如“IOException Occursed:Socket closed”,这就是您得到的所有信息。我知道这非常古老,但是。。。这些日志写入到哪里?我试图调试一个问题,但我在任何地方都找不到这些愚蠢的日志。
  logger.error("IOException Occured :", exception);