Wildfly部署Spring Boot项目server.log仅打印错误日志问题
问题根因
核心原因是Spring Boot 2.7默认内嵌了Logback日志实现,打包部署到Wildfly时没有做容器日志适配,自带的日志实现和Wildfly原生的JBoss Logging子系统产生了冲突,导致应用日志上下文和容器日志上下文隔离,才会出现你遇到的输出异常:
- Wildfly默认仅会把应用侧
System.err流的内容、以及ERROR级别的日志透传到server.log文件 System.out输出、SLF4J打印的INFO/DEBUG等低级别日志,被Spring Boot自带的Logback拦截后没有交给Wildfly日志系统处理,自然无法写入容器的日志文件- 同环境下非Spring架构的War包日志正常,是因为这类应用没有自带独立日志实现,直接调用了容器提供的日志绑定,完全匹配Wildfly的默认日志规则。
修复步骤
按以下顺序调整配置即可解决问题:
- 排除Spring Boot默认自带的日志Starter,消除依赖冲突
调整pom.xml中spring-boot-starter-web的依赖配置,排除默认的日志实现包:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> - 添加Wildfly日志桥接依赖,将应用侧的SLF4J日志调用统一转发给容器日志系统处理,注意依赖范围设为
provided,避免重复打包进War包:<dependency> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.4.3.Final</version> <scope>provided</scope> </dependency> - 关闭Spring Boot对系统输出流的私自拦截,在
application.properties中添加如下配置:
如果你项目里自定义过logging.register-shutdown-hook=falselogback-spring.xml、log4j2.xml这类独立日志配置文件,部署到Wildfly时可以直接移除——日志级别、输出格式、落盘规则全部由Wildfly的日志配置统一管控即可,不需要应用侧单独配置。
调整完成后重新打包部署,再调用接口测试,System.out输出、SLF4J的INFO级别日志就会正常写入server.log,和其他非Spring应用的日志表现完全一致。
注:如果调整后仍看不到INFO日志,可检查Wildfly配置中根日志记录器的级别是否被误设为ERROR,同环境其他应用正常的情况下一般不需要修改容器侧配置。
内容的提问来源于stack exchange,提问作者Sudipta Roy
相关产品推荐
相关产品推荐

