Log4j2.properties在Amazon Linux 2023(Java17)下无日志输出排查
Log4j2 在 Amazon Linux 2023 + Tomcat 11 环境下的日志问题
问题现象
- Windows 本地环境:通过
log4j2.properties配置,日志可正常输出到控制台和文件,行号显示正确。 - Amazon Linux 2023(AL23)服务器环境(搭配 Apache Tomcat 11.0.4、Java 17 Corretto):
- 初始阶段控制台和文件均无日志输出;
- 后续日志虽能输出,但行号异常显示为
-1。
排查方案
1. 核对 Log4j2 依赖完整性
- 确认 WAR 包中包含
log4j-core.jar、log4j-api.jar和log4j-web.jar(Tomcat 11 需搭配 Log4j2 2.17+ 版本,避免版本兼容冲突)。 - 检查 Tomcat 服务器的
lib目录,移除冲突的日志框架包(如slf4j-log4j12.jar、commons-logging.jar等),防止日志路由异常。
2. 确认配置文件加载状态
- 确保
log4j2.properties放置在 WAR 包的WEB-INF/classes目录下,Tomcat 启动时能正确读取。 - 启动 Tomcat 时添加 JVM 参数
-Dlog4j2.debug=true,查看启动日志中 Log4j2 的加载日志,确认配置文件是否被成功定位并解析。
3. 排查 AL23 环境的权限与 SELinux 限制
- 日志目录权限检查:确保 Tomcat 运行用户(通常为
tomcat)对日志输出目录有读写权限,执行命令:sudo chown -R tomcat:tomcat /path/to/your/log/folder sudo chmod -R 755 /path/to/your/log/folder - SELinux 策略检查:AL23 默认开启 SELinux,可能阻止 Tomcat 写入日志。临时关闭 SELinux 测试(
sudo setenforce 0),若日志恢复正常,需添加持久化规则:sudo semanage fcontext -a -t tomcat_log_t "/path/to/your/log/folder(/.*)?" sudo restorecon -Rv /path/to/your/log/folder
4. 修复行号显示 -1 的问题
- 编译调试信息检查:确认应用编译时未关闭调试信息(未使用
-g:none参数)。Maven/Gradle 构建时,确保未禁用类文件的调试符号(Maven 默认保留,Gradle 需确认compileJava任务未设置debug = false)。 - Log4j2 布局配置检查:若使用
PatternLayout,确保模式中包含%L标记;若开启异步日志,检查配置中是否设置includeLocation=false,该参数会关闭行号收集,需改为includeLocation=true(注意会小幅影响性能)。 - 打包工具检查:若使用 ProGuard、ShadowJar 等工具打包,需确保未移除类文件的调试信息或混淆行号,调整打包规则保留必要的调试数据。
5. 验证 Tomcat 与 Log4j2 的集成配置
- 检查 Tomcat 的
conf/logging.properties,避免其覆盖应用的 Log4j2 配置。如需让应用完全接管日志,可在conf/context.xml中添加:<Resource name="log4j2/Configuration" auth="Container" type="org.apache.logging.log4j.core.LoggerContext" factory="org.apache.logging.log4j.web.Log4jWebContextFactory"/> - 确认 Tomcat 类加载顺序,保证应用的 Log4j2 依赖优先加载,避免容器自带日志框架干扰。
内容的提问来源于stack exchange,提问作者Gee
相关产品推荐
相关产品推荐

