我在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 ) );
}
这是正确的方法吗?它会在日志中打印堆栈跟踪吗?
答案 0 :(得分:4)
如果要记录异常,请使用
logger.error("IOException Occured :", exception);
是否显示堆栈跟踪取决于底层日志记录实现的内容以及配置方式。 AFAIK,大多数或所有实现都默认显示异常的堆栈跟踪。
答案 1 :(得分:2)
Apache commons日志记录解释:互联网上没有太多关于此的文档。这是一篇适合您的小文章:
为了在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 logging设置为显示来自INFO及更高版本的所有消息。正如您所看到的,每个方法都会重载一个方法,您可以在其中发送Throwable类型,例如Exception - 非常方便! 这就是记录消息所需要做的全部工作。
在您的情况下,您只需要使用:
logger.error("IOException Occured :", exception);
不需要调用stackTrace,因为抛出异常将记录此处的异常对象。