从Wildfly 18迁移至33(经26版本)后日志消失问题求助
解决Wildfly 33迁移后应用日志重启消失的问题
一、持久化日志配置
你通过控制台修改的root-logger配置是临时生效的,Wildfly默认不会将控制台修改自动写入核心配置文件,重启后会重置。必须手动修改配置文件实现持久化:
- 打开
standalone/configuration/standalone.xml(如果使用全功能配置则是standalone-full.xml) - 找到
<subsystem xmlns="urn:jboss:domain:logging:8.0">节点,检查并修正root-logger配置,确保它关联正确的日志处理器,示例:
<root-logger> <level name="INFO"/> <handlers> <handler name="CONSOLE"/> <handler name="FILE"/> </handlers> </root-logger>
- 保存文件后重启Wildfly,配置会永久生效。
二、清理SLF4J依赖冲突残留
虽然你排除了test scope的logback,但要确保主代码依赖中没有引入其他SLF4J实现:
- 执行
mvn dependency:tree,检查是否有logback-classic、slf4j-simple等非Wildfly提供的SLF4J实现被标记为compile/runtime scope - 如果存在冲突依赖,在对应依赖项中添加排除规则,比如:
<dependency> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> </exclusion> </exclusions> </dependency>
- 确保应用仅使用Wildfly内置的
slf4j-jboss-logmanager作为SLF4J实现。
三、添加应用专属Logger配置
因为你使用org.jboss.logging.Logger,需明确配置应用包的日志路由:
- 在
standalone.xml的logging子系统中,添加对应应用包的logger节点,指定日志级别,示例(假设应用根包为com.yourcompany):
<logger category="com.yourcompany"> <level name="INFO"/> </logger>
- 该配置会确保应用的日志被正确传递到root-logger的处理器中。
四、清理迁移残留配置
你提到移除了default-migration,需进一步清理迁移工具生成的无效日志配置:
- 检查
standalone.xml中是否存在旧版本的handler、logger节点,或命名空间不匹配的配置项,直接删除无效内容 - 确认logging子系统的命名空间与Wildfly 33匹配(默认是
urn:jboss:domain:logging:8.0)
五、验证日志输出
在应用启动类或初始化Bean中添加测试日志,验证配置是否生效:
import org.jboss.logging.Logger; public class AppInitializer { private static final Logger LOGGER = Logger.getLogger(AppInitializer.class); public void onStartup() { LOGGER.info("应用启动测试日志:已成功接入Wildfly日志系统"); } }
重启Wildfly后,检查控制台和日志文件,确认该日志是否正常输出。
内容的提问来源于stack exchange,提问作者Louis KRMK
相关产品推荐
相关产品推荐

