You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4j2日志无法写入文件求助(RHEL9环境)

Log4j2在RHEL9上无法写入指定路径日志的问题排查与解决

问题描述

我有一个内嵌log4j2.xml配置文件的应用,在本地环境及RHEL7.9(CPE OS Name: cpe:/o:redhat:enterprise_linux:7.9:GA:server)服务器上日志功能正常,但部署到RHEL9(CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos)服务器后,日志无法写入指定路径。已排查权限问题及文件夹创建情况,未发现异常。

Log4j2.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
        <Properties>
                <Property name="base_log">/com/logs/testing/</Property>
                <Property name="testing_utility_log">${base_log}/testing_utility.log</Property>
        </Properties>
        <Appenders>
                <RollingFile name="testing_utility" fileName="${testing_utility_log}" filePattern="${testing_utility_log}_%d{dd-MM-yyyy}" ignoreExceptions="false">
                        <PatternLayout>
                                <Pattern>%d{HH:mm:ss,SSS}[%t] %-5p(%F:%L) - %m%n</Pattern>
                        </PatternLayout>
                        <TimeBasedTriggeringPolicy/>
                </RollingFile>
        </Appenders>
        <Loggers>
                <Root level="INFO">
                        <AppenderRef ref="testing_utility"/>
                </Root>
        </Loggers>
</Configuration>

类路径依赖Jar包

commons-codec-1.16.1.jar
commons-io-2.15.1.jar
commons-lang3-3.12.0.jar
log4j-api-2.17.2.jar
log4j-core-2.17.2.jar
log4j-jul-2.17.2.jar
log4j-slf4j-impl-2.17.2.jar
slf4j-api-1.7.31.jar

日志相关代码实现

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static final Logger LOGGER = LogManager.getLogger(Testing.class);
LOGGER.info("[Starting Testing for {} ] ", fileName);

本地日志输出示例

09:52:33,349[main] INFO (Testing.java:39) - [Starting Testing for TEST45678 ] 

排查与解决方向

  1. 检查SELinux状态
    RHEL9默认SELinux为强制模式,即便文件夹权限正常,也可能阻止应用写入路径。执行sestatus查看状态,若为Enforcing,可临时切换为Permissive模式测试:setenforce 0。如果日志恢复正常,说明是SELinux策略限制,可添加永久规则:

    semanage fcontext -a -t httpd_sys_rw_content_t "/com/logs/testing(/.*)?"
    restorecon -Rv /com/logs/testing
    

    (根据应用类型调整上下文,普通Java应用可使用java_home_t)

  2. 核对JDK版本
    RHEL9默认OpenJDK版本与RHEL7.9存在差异,部分版本的文件系统访问逻辑有变化。确认应用使用的JDK版本是否一致,不一致则切换到RHEL7.9同款JDK测试。

  3. 调整Log4j2路径配置
    尝试移除路径末尾斜杠,将base_log改为/com/logs/testing,避免路径解析时出现异常。

  4. 开启Log4j2调试日志
    启动应用时添加JVM参数-Dlog4j2.debug=true,查看初始化过程中的详细日志,定位配置加载、文件访问的具体错误。

  5. 检查文件系统挂载属性
    执行mount命令查看/com/logs/testing所在分区的挂载参数,确认是否存在noexec、nodev等限制写入的属性。

内容的提问来源于stack exchange,提问作者Chennai Cheetah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:50:12