Spring Boot+Log4j2 Dev环境日志未写入指定文件问题排查
Dev环境日志仅输出到catalina.out排查清单
Tomcat环境配置验证
- 检查Dev环境Tomcat的
catalina.properties中spring.profiles.active=dev是否真正生效:启动Tomcat后,在catalina.out中搜索The following 1 profile is active: 'dev',确认Spring Boot加载的是dev环境配置,而非默认或其他环境。 - 排查Tomcat启动脚本
catalina.sh的JVM参数:查看是否存在-Dspring.profiles.active参数覆盖了catalina.properties的配置,或者-Dlog4j.configurationFile指定了非预期的日志配置文件路径。
Log4j2配置加载与正确性检查
- 确认Spring Boot是否加载了正确的
log4j2-spring.xml:在catalina.out中搜索Log4j2 configuration file相关日志,验证加载的是应用内的dev环境配置,而非Tomcat全局目录(如/opt/tomcat/lib)下的日志配置。 - 检查log4j2-spring.xml中dev环境的配置块:确保
<springProfile name="dev">包裹的Info日志Appender配置正确,包括文件名、路径无拼写错误,日志级别(Level)设置为info及以上,且Appender正确关联到Root Logger或业务Logger。
Linux系统权限与路径问题
- 验证日志目录权限:执行
ls -ld <日志目录路径>,确认目录的所属用户/组与Tomcat运行用户一致,且Tomcat用户拥有读写权限。权限不足会导致日志写入失败,静默转输出到catalina.out。 - 确认日志目录存在:用
mkdir -p <日志目录路径>确保目录已创建,避免因目录不存在导致日志无法写入。
Spring Boot日志优先级与依赖检查
- 检查war包内的日志依赖:解压Dev环境部署的war包,查看
WEB-INF/lib下是否存在slf4j-jdk14、logback-classic等冗余日志实现依赖,这类依赖会干扰Log4j2的正常工作(即使pom.xml已排除,需确认打包结果)。 - 核对application.yaml的dev环境日志配置:检查是否存在
logging.config参数覆盖了log4j2-spring.xml的路径,或logging.level配置过滤了Info级别日志。
Tomcat全局日志配置干扰排查
- 对比Dev与QA环境的
conf/logging.properties:确认Dev环境未修改Tomcat全局日志配置,比如未将SLF4j桥接类指向Tomcat自带日志实现,避免Log4j2配置被覆盖。 - 检查
conf/context.xml:确认未添加与日志相关的Valve或Resource组件,防止其干扰应用日志输出。
进程与日志句柄验证
- 检查Tomcat进程的日志文件句柄:执行
lsof -p <Tomcat进程ID>,查看是否持有AuthServer-info.log的文件句柄。若没有说明配置未生效;若有但文件无内容,可在Log4j2配置中添加immediateFlush="true"强制刷新缓冲。 - 重启Tomcat后立即验证:避免进程缓存旧配置,确保修改后的配置被重新加载。
内容的提问来源于stack exchange,提问作者Vincent Zheng
相关产品推荐
相关产品推荐

