为什么SLF4不显示来自JUL FINER消息的DEBUG消息?

时间:2016-08-30 12:51:41

标签: java logging slf4j java.util.logging

我们正在使用JUL日志记录转换为SLF4J日志记录。但是我们的一些JAR使用JUL日志记录。使用SLF4JBridgeHandler时,我们注意到我们希望显示的一些消息无法按预期工作。

特别是当我们在SL4J中为JAR打开DEBUG时,FINER的消息编写器没有显示。

以下是SLF4JBridgeHandler.java的文档:

 FINEST  -> TRACE
 FINER   -> **DEBUG**
 FINE    -> DEBUG
 INFO    -> INFO
 WARNING -> WARN
 SEVERE  -> ERROR

1 个答案:

答案 0 :(得分:0)

SLF4JBridgeHandler上的文档错误。

以下是SLF4JBridgeHandler.java的附加代码:

  private static final int TRACE_LEVEL_THRESHOLD = Level.FINEST.intValue();
  private static final int DEBUG_LEVEL_THRESHOLD = Level.FINE.intValue();
  private static final int INFO_LEVEL_THRESHOLD = Level.INFO.intValue();
  private static final int WARN_LEVEL_THRESHOLD = Level.WARNING.intValue();

文档应该如下所示:

 FINEST  -> TRACE
 FINER   -> **TRACE**
 FINE    -> DEBUG
 INFO    -> INFO
 WARNING -> WARN
 SEVERE  -> ERROR

以下是SLF4JBridgeHandler.java的附加代码:

  protected void callPlainSLF4JLogger(Logger slf4jLogger, LogRecord record) {
    String i18nMessage = getMessageI18N(record);
    int julLevelValue = record.getLevel().intValue();
    if (julLevelValue <= TRACE_LEVEL_THRESHOLD) {
      slf4jLogger.trace(i18nMessage, record.getThrown());
    } else if (julLevelValue <= DEBUG_LEVEL_THRESHOLD) {
      slf4jLogger.debug(i18nMessage, record.getThrown());
    } else if (julLevelValue <= INFO_LEVEL_THRESHOLD) {
      slf4jLogger.info(i18nMessage, record.getThrown());
    } else if (julLevelValue <= WARN_LEVEL_THRESHOLD) {
      slf4jLogger.warn(i18nMessage, record.getThrown());
    } else {
      slf4jLogger.error(i18nMessage, record.getThrown());
    }
  }