Seb*_*ian 7 java logging exception-handling slf4j
我有一个案例,我想介绍一些错误记录.但是在这一点上我不确定异常将在多久发生(实验特征,错误取决于用户输入)并且我有点担心使用堆栈跟踪充斥日志.
所以我提出了这个解决方案:
catch (Exception ex) {
if (LOGGER.isDebugEnabled()) {
LOGGER.error("Exception during save()", ex); // log with stacktrace
} else {
LOGGER.error("Exception during save(): {}", ex.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
但我对此并不满意,因为我觉得滥用调试级别来记录错误级别.我用org.slf4j.Logger.
如果您只关心不要用不相关的堆栈跟踪向日志发送垃圾邮件,您仍然可以不滥用日志级别的想法,而是拥抱它:
catch (Exception ex) {
LOGGER.error("Exception during save(): {}", ex.toString());
LOGGER.debug("Detailed exception output:", ex);
}
Run Code Online (Sandbox Code Playgroud)
从性能角度来看,您建议的解决方案使用isDebugEnabled分数会更好一些,因为除非您确实需要它,否则不会为第二次调用创建 String 对象(第一个参数)。并且您还可以在调用堆栈上保留一个级别。