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

时间:2018-03-21 07:51:56

标签: 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());
    }
}

但我对此并不满意,因为我觉得滥用调试级别来记录错误级别。我使用org.slf4j.Logger

1 个答案:

答案 0 :(得分:0)

如果您只关心不使用不相关的堆栈跟踪垃圾邮件,您仍然可以不滥用日志级别的想法,而是接受它:

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

使用isDebugEnabled得分的建议解决方案在性能上更好一点,因为除非你确实需要,否则不会为第二次调用创建String对象(第一个参数)。而且你还可以在调用堆栈中保留一个级别。