Log4j2配置异常:Logger已加载但日志未写入指定文件
JEE REST API迁移Log4j2日志异常问题排查方案
问题现象
配置monitorAppender滚动文件追加器及ZDAMonitor Logger后,调用LogManager.getLogger("ZDAMonitor").fatal("Test123")时,日志未写入指定文件,反而输出到控制台;Log4j调试日志显示ZDAMonitor Logger已成功注册。环境:WebSphere 8.5.5.22、Java 1.8、Log4j2 2.19.0(Gradle构建)。
排查与解决步骤
1. 处理WebSphere日志框架类加载冲突
WebSphere 8.5.x默认自带IBM日志实现,会优先加载自带类库,导致Log4j2的Appender无法生效。
- 操作:在WebSphere控制台将应用类加载顺序设为PARENT_LAST:
控制台路径:应用程序 → 企业应用程序 → 目标应用 → 类加载和更新检测 → 类加载顺序选择"PARENT_LAST"
2. 验证${baseDir}变量解析
配置中的${baseDir}未正确赋值会导致无法创建日志文件,Log4j2自动降级到控制台输出。
- 检查配置文件是否定义该变量:
<Configuration> <Property name="baseDir">/opt/was/logs/your-app</Property> <!-- 其余配置 --> </Configuration> - 或通过JVM参数传递:
-DbaseDir=/opt/was/logs/your-app - 辅助验证:查看Log4j2调试日志,搜索
baseDir相关条目,确认是否解析成功
3. 检查日志目录权限
WebSphere运行用户无目标目录读写权限时,无法创建日志文件,触发控制台 fallback。
- 操作:
- 确认
${baseDir}对应的物理目录存在 - 赋予WebSphere进程用户(如
wasadmin)该目录的读写权限 - 手动创建
ZDA_monitor.log文件并设置权限后重试
- 确认
4. 确认Log4j2配置文件加载完整性
即使Logger已注册,Appender可能未被正确初始化。
- 确保配置文件(如
log4j2.xml)放置在WEB-INF/classes目录,或通过JVM参数指定路径:-Dlog4j.configurationFile=/path/to/log4j2.xml - 查看Log4j2调试日志,搜索
monitorAppender,确认存在类似DEBUG Starting RollingFileAppender monitorAppender的初始化日志
5. 调整Log4j2版本适配WebSphere环境
Log4j2 2.19.0与WebSphere 8.5.5.22的Java 8环境可能存在兼容性问题。
- 操作:降级至Log4j2 2.17.x LTS版本,更新Gradle依赖:
implementation 'org.apache.logging.log4j:log4j-api:2.17.4' implementation 'org.apache.logging.log4j:log4j-core:2.17.4'
内容的提问来源于stack exchange,提问作者CliffAnderson
相关产品推荐
相关产品推荐

