我在这里滥用日志级别的想法吗?

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.

ing*_*ous 0

如果您只关心不要用不相关的堆栈跟踪向日志发送垃圾邮件,您仍然可以不滥用日志级别的想法,而是拥抱它:

catch (Exception ex) {
  LOGGER.error("Exception during save(): {}", ex.toString()); 
  LOGGER.debug("Detailed exception output:", ex);
}
Run Code Online (Sandbox Code Playgroud)

从性能角度来看,您建议的解决方案使用isDebugEnabled分数会更好一些,因为除非您确实需要它,否则不会为第二次调用创建 String 对象(第一个参数)。并且您还可以在调用堆栈上保留一个级别。