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

在Payara 6中使用Logback 1.4.14出现ClassNotFoundException求助

解决Payara 6.2024.1 + Logback 1.4.14 管理GUI无法访问的问题

问题原因

Payara 6基于Jakarta EE 9+,所有Servlet相关API从javax.servlet迁移到jakarta.servlet命名空间。将Logback的jar包放在lib/ext目录会导致系统类加载器优先加载这些jar,若Logback间接依赖旧的javax.servlet类,会覆盖容器自身的jakarta.servlet类,最终引发ClassNotFoundException: jakarta.servlet.ServletContainerInitializer,导致管理GUI无法启动。而Payara 5基于Java EE 8,使用javax.servlet命名空间,因此不会出现此冲突。

解决方案

1. 调整Logback jar的存放位置

将logback-core-1.4.14.jar和logback-classic-1.4.14.jar从${payaraRoot}\glassfish\domains\TEST\lib\ext移动到${payaraRoot}\glassfish\domains\TEST\lib目录。

  • lib目录下的jar由Payara的应用类加载器加载,不会干扰容器核心类的加载顺序,避免命名空间冲突。

2. 添加适配的SLF4J桥接器

Logback 1.4.x对应SLF4J 2.x版本,需要添加jul-to-slf4j-2.0.x.jar(版本需与Logback兼容,建议用2.0.9或匹配版本)到${payaraRoot}\glassfish\domains\TEST\lib目录。

  • org.slf4j.bridge.SLF4JBridgeHandler属于该jar包,确保桥接器能正常工作,同时避免类缺失问题。

3. 修正logging.properties配置

编辑${payaraRoot}\glassfish\domains\TEST\config\logging.properties,确保配置正确:

# 保留SLF4J桥接器作为handler
handlers=org.slf4j.bridge.SLF4JBridgeHandler
# 关闭默认的JUL handlers(可选,避免重复日志)
# handlers=java.util.logging.ConsoleHandler,java.util.logging.FileHandler

# 设置桥接器日志级别
org.slf4j.bridge.SLF4JBridgeHandler.level=INFO

# 禁用JUL的默认日志处理,避免重复输出
java.util.logging.ConsoleHandler.level=OFF
java.util.logging.FileHandler.level=OFF

4. 验证配置并重启域

  • 确保logback.xml仍放在${payaraRoot}\glassfish\domains\TEST\config目录(该配置会被Logback自动识别)。
  • 执行命令asadmin restart-domain TEST重启域,之后访问localhost:4848即可正常打开管理GUI,同时Logback的日志配置也会生效。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:43:21