You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:33:14