Java 8 + Jersey 2.26环境下LoggingFilter未执行求助
看起来你遇到的是Jersey应用里日志不输出的常见问题,我来帮你一步步排查和解决:
1. 确认日志依赖是否齐全
Jersey本身不会自带完整的日志实现,需要你补充对应的日志框架依赖。如果你用的是JDK自带的java.util.logging.Logger,得先确保依赖和配置都到位;如果想切换到SLF4J+Logback或者Log4j2这类更灵活的框架,也需要添加对应依赖包。
针对JDK Logging的配置
先检查pom.xml里是否包含Jersey的核心日志相关依赖:
<dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-common</artifactId> <version>2.26</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.26</version> </dependency> <!-- 如果需要记录HTTP请求/响应的详细日志,添加这个依赖 --> <dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-logging</artifactId> <version>2.26</version> </dependency>
接着在src/main/resources目录下创建logging.properties配置文件,指定日志输出级别和处理器:
# 指定日志处理器为控制台输出 handlers=java.util.logging.ConsoleHandler # 你的资源类所在包的日志级别,设为FINEST可以输出所有级别的日志 mypackage.MyResource.level=FINEST # 控制台处理器的日志级别 java.util.logging.ConsoleHandler.level=FINEST # 日志格式 java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
启动应用时需要指定这个配置文件:
- 命令行启动:
java -Djava.util.logging.config.file=src/main/resources/logging.properties -jar your-app.jar - Eclipse运行:在Run Configuration的VM Arguments里添加
-Djava.util.logging.config.file=${project_loc}/src/main/resources/logging.properties
2. 检查Logger的初始化和使用是否正确
你的资源类里的Logger初始化一定要绑定当前类的Class对象,这样才能精准控制日志级别:
private static final Logger logger = Logger.getLogger(MyResource.class.getName());
然后在代码里调用对应级别的日志方法,比如:
logger.info("处理请求开始"); logger.warning("参数格式存在异常"); logger.severe("调用Service时发生严重错误");
注意:如果你的日志级别配置的是INFO,那FINE、FINER这类低级别的日志是不会输出的,要对应调整配置或调用的方法。
3. 添加Jersey请求日志过滤器(可选)
如果需要记录完整的HTTP请求和响应日志,可以在Jersey的Application类里注册LoggingFeature:
package mypackage; import org.glassfish.jersey.logging.LoggingFeature; import org.glassfish.jersey.server.ResourceConfig; import java.util.logging.Level; public class MyApplication extends ResourceConfig { public MyApplication() { // 扫描你的资源类所在包 packages("mypackage"); // 注册日志过滤器,设置日志级别、输出内容和 payload 长度限制 register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, 10000)); } }
这样就能在控制台看到包含请求头、响应体在内的完整HTTP交互日志了。
4. 排查Eclipse运行环境的日志配置
有时候Eclipse自带的日志配置会覆盖项目的设置,你可以通过Window > Preferences > Java > Logging路径检查配置,确保项目的logging.properties被正确加载,或者直接在这里临时调整日志级别测试。
如果以上步骤都试过还是不行,可以把你的pom.xml完整内容和Logger的具体使用代码贴出来,我再帮你进一步定位问题。
内容的提问来源于stack exchange,提问作者StackUser

