5

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

 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 ) );
   }

这是正确的方法吗?它会在日志中打印堆栈跟踪吗?

4

2 回答 2

4

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

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

是否显示堆栈跟踪取决于底层的日志记录实现是什么,以及它是如何配置的。AFAIK,大多数或所有实现默认显示异常的堆栈跟踪。

于 2012-12-14T12:19:04.443 回答
2

Apache 公共日志记录解释:互联网上没有太多关于此的文档。这是一篇有益于您的小文章:

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

现在,要创建您的日志,请通过以下两种方式之一在您的类中创建一个属性:

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

或者

   private Log m_log = LogFactory.getLog("MyClassLogger");

第一个选项只是为您的类创建一个通用记录器,它将由默认记录选项控制。第二个选项是创建一个您命名为“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 日志记录设置为显示来自 INFO 及更高版本的所有消息。如您所见,每个方法都重载了一个方法,您可以在其中发送 Throwable 类型,例如 Exception - 非常方便!这就是记录消息所需要做的一切。

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

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

无需调用 stackTrace,因为此处的异常对象将与抛出的异常一起记录。

于 2012-12-14T12:28:52.247 回答