Jerseys新LoggingFeature中的日志级别

时间:2016-06-22 09:07:54

标签: java jersey

我正在尝试使用Jersey 2.23登录。从此版本开始,不推荐使用类LoggingFilter,例如,可以在此处阅读https://jersey.java.net/documentation/latest/logging_chapter.html。所以我必须使用LoggingFeature代替。 的工作原理是register ResourceConfig方法,正如本文档中所述。但最终property方法起作用了:

client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, "WARN");

这会将每条消息打印为警告。不幸的是,它被记录在案(至少我找不到任何东西)允许哪些值。显然它必须是一个String,因为我得到一条日志消息,当我尝试除String之外的任何东西时,无法将值转换为String。现在我想用TRACE级别记录这些消息,但我找不到适合的字符串来实现这一点。 " TRACE"和" FINE"例如,在这些情况下没有记录任何内容。我必须提到我将Log4j2与Slf4jBridgeHandler一起使用,因为Jersey使用JUL。

1 个答案:

答案 0 :(得分:9)

我自己挣扎了好几个小时才终于发现了这个神秘的故事"今天。

这有点违反直觉,但您使用LOGGING_FEATURE_LOGGER_LEVEL_SERVER设置的级别实际上是服务器记录器必须设置为打印日志的最低级别。我根据名称假设这是设置实际记录器级别 - 这意味着将其设置为FINERFINEST会产生更多输出。相反,它只是"关闭"除非满足特定级别,否则记录日志。

例如,如果将其设置为WARNING,只要服务器/客户端设置为至少打印WARNING级别,您就会看到日志。 java.util.logging定义的级别为:

  

严重(最高价值)
  警告
  INFO
  CONFIG
  FINE
  FINER
  最好的(最低价值)

因此,通过将其设置为WARNING(文字WARN在2.23.1中对我不起作用),您将看到日志,因为默认情况下,日志记录通常位于INFO水平。

另一种解决方案是更改logging.properties文件中的默认日志记录级别,该级别通常为$JAVA_HOME/jre/lib/logging.properties。例如,您可以对文件进行以下更改,您不再需要在代码中设置任何特殊属性:

java.util.logging.ConsoleHandler.level = FINEST  
org.glassfish.jersey.test.JerseyTest.level = FINEST

这样做的明显缺点是它会影响你从这个JDK / JRE运行的任何东西。您可以通过多种方式覆盖此标准位置并使用备用logging.properties文件,但这取决于您执行代码的方式,因此我会根据您的具体情况对您进行研究。

这个线程的一个例子解释了在使用Maven时如何做到这一点:Logging level under maven surefire