我想用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");
Run Code Online (Sandbox Code Playgroud)
这会将每条消息打印为警告.不幸的是,它被记录在哪里(至少我找不到任何东西)允许哪些值.显然它必须是一个String,因为我得到一条日志消息,当我尝试除String之外的任何东西时,无法将值转换为String.现在我想用级别TRACE记录这些消息,我找不到适合的字符串来实现这一点.例如,"TRACE"和"FINE"不起作用,在这些情况下没有记录任何内容.我必须提到我将Log4j2与Slf4jBridgeHandler一起使用,因为Jersey使用JUL.
小智 9
我自己挣扎了几个小时才终于揭开了今天的"神秘面纱".
这有点违反直觉,但您设置的级别LOGGING_FEATURE_LOGGER_LEVEL_SERVER实际上是服务器记录器必须设置为打印日志的最低级别.根据名称,我假设这是设置实际记录器级别 - 暗示将其设置为FINER或FINEST将产生更多输出.相反,它只是"关闭"日志记录,除非满足特定级别.
例如,如果将其设置为,WARNING那么只要服务器/客户端设置为至少打印WARNING级别,您就会看到日志.java.util.logging定义的级别为:
严重(最高值)
警告
INFO
CONFIG
FINE
FINER
FINEST(最低值)
因此,通过将其设置为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
Run Code Online (Sandbox Code Playgroud)
这样做的明显缺点是它会影响你从这个JDK/JRE运行的任何东西.您可以通过多种方式覆盖此标准位置并使用备用logging.properties文件,但这取决于您执行代码的方式,因此我会根据您的具体情况对您进行研究.
一个例子就是这个线程解释了在使用Maven时如何做到这一点:在maven surefire下记录级别
| 归档时间: |
|
| 查看次数: |
5985 次 |
| 最近记录: |