Jersey 2框架使用LoggingFeature无法记录请求响应问题求助
解决Jersey 2.x LoggingFeature无法记录请求/响应的问题
嘿,我之前也踩过这个坑!用Jersey的LoggingFeature却看不到任何日志,大概率是配置环节出了疏漏,结合你基于Hello World示例的场景,咱们一步步来搞定:
1. 先确认LoggingFeature是否正确注册到Jersey配置里
你原来的MyApplication类(继承ResourceConfig的那个),必须显式注册LoggingFeature,不然Jersey不会启用它。修改后的代码应该是这样的:
import org.glassfish.jersey.logging.LoggingFeature; import java.util.logging.Level; import java.util.logging.Logger; public class MyApplication extends ResourceConfig { public MyApplication() { // 注册你的资源类 register(HelloWorldResource.class); // 关键:注册LoggingFeature,设置日志级别和详细程度 register(new LoggingFeature( Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, // 要显示请求/响应内容必须设这个 10000 // 日志内容的最大长度,按需调整 )); } }
这里要注意Verbosity.PAYLOAD_ANY,默认是HEADERS_ONLY,只会输出请求头,不会显示请求体和响应内容,所以必须显式设置成PAYLOAD_ANY才能看到完整的请求/响应数据。
2. 处理日志框架的适配问题
Jersey的LoggingFeature默认使用Java Util Logging (JUL),而Tomcat默认的日志系统可能会屏蔽JUL的输出,或者日志级别设置不对。这里分两种情况处理:
情况A:继续用JUL,配置Tomcat的日志
找到Tomcat安装目录下的conf/logging.properties,添加一行:
org.glassfish.jersey.logging.LoggingFeature.level = INFO
这样就能让Tomcat输出Jersey LoggingFeature的INFO级日志,日志会出现在Tomcat的logs/catalina.out或者localhost.log里。
情况B:切换到更常用的SLF4J/Logback(推荐)
如果习惯用SLF4J+Logback,需要添加对应的依赖(以Maven为例):
<dependencies> <!-- 原有的Jersey依赖 --> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.23.2</version> <!-- 保持你的Jersey版本 --> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.23.2</version> </dependency> <!-- SLF4J桥接和Logback依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>1.7.36</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> </dependencies>
然后在src/main/resources下创建logback.xml,配置日志输出:
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 开启Jersey日志的INFO级别 --> <logger name="org.glassfish.jersey.logging.LoggingFeature" level="INFO"/> <root level="INFO"> <appender-ref ref="STDOUT"/> </root> </configuration>
这样启动Tomcat后,就能在控制台或者日志文件里看到完整的请求和响应日志了。
3. 最后检查几个坑点
- 确保Jersey版本确实是2.23及以上,
LoggingFeature是从这个版本开始正式推荐使用的,旧版本可能有兼容问题。 - 检查你的Tomcat是否有权限写入日志目录,不然日志可能被静默丢弃。
- 如果是IDE里运行Tomcat,确认IDE的日志输出级别没有过滤掉INFO级别的内容。
按照上面的步骤配置完,应该就能看到所有请求和响应的日志了!
内容的提问来源于stack exchange,提问作者CyberMuz
相关产品推荐
相关产品推荐

