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

log4j迁移至log4j2后配置不生效无法生成日志文件问题求助

问题排查及解决方法

核心错误点梳理

  1. JVM启动参数配置错误
    你当前用的是Log4j1的配置指定参数,Log4j2的对应参数已变更,会导致配置文件根本没有被加载。
  2. Log4j2.xml规则配置错误
    你配置的文件AppenderA1仅绑定到了完全无关的org.apache.log4j.xml日志路径,你的业务代码日志不会输出到该文件,所有日志仅通过Root绑定的控制台输出,被shell脚本重定向到了$FicTrac文件中,自然不会生成目标日志文件。
  3. 路径不匹配问题
    你期望的日志路径是C:\LogFolder\mylog.log,但配置里写的是C:\TEMP\LogFolder\mylog.log,多了一级TEMP目录,即使配置正确也会生成到错误路径下。
  4. 目录权限/自动创建问题
    Log4j2默认不会自动创建日志文件的父目录,如果目标目录不存在会导致文件写入失败。

具体修复步骤

1. 修正shell启动脚本的JVM参数

将Log4j配置相关参数替换为Log4j2版本的正确参数:

# 原错误参数:-Dlog4j.configuration=file:/${myprog}/log4jConf.xml -Dlog4j.debug=true
# 替换为正确参数后的完整启动命令:
"$JAVA_HOME/bin/java" -Dlog4j2.debug=true -Xmx256m -Xms64m -Dcom.mypackage.pack.conf=${myprog}/myconf.properties -Dlog4j2.configurationFile=file:/${myprog}/log4jConf.xml   -cp ${myprog}/myjar-SNAPSHOT.jar com.mypackage.pack.MyJavaClass  ${paramjava} $@ >> $FicTrac  2>&1

临时排查时可以先去掉末尾的>> $FicTrac 2>&1,直接查看控制台输出的Log4j2初始化日志,确认配置文件是否被正常加载、有没有报错。

2. 修正Log4j2.xml配置

以下是对齐原有Log4j1配置的正确版本,保留按天滚动的特性、日志格式、级别规则:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <!-- 按天滚动的文件Appender,对齐原DailyRollingFileAppender逻辑 -->
    <RollingFile name="file" fileName="C:\LogFolder\mylog.log"
                 filePattern="C:\LogFolder\mylog.log.%d{yyyy-MM-dd}"
                 createOnDemand="true"> <!-- 自动创建父目录 -->
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n %M:%L"/>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
      </Policies>
    </RollingFile>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n %M:%L"/>
    </Console>
  </Appenders>
  <Loggers>
    <!-- 业务包日志级别设置为INFO,输出到文件 -->
    <Logger name="com.mypackage.pack" level="INFO" additivity="false">
      <AppenderRef ref="file"/>
      <!-- 如果需要业务包日志同时输出到控制台,可以再加一行<AppenderRef ref="STDOUT"/> -->
    </Logger>
    <!-- 关闭PERFS日志 -->
    <Logger name="PERFS" level="OFF"/>
    <!-- 根日志级别对齐原配置的ERROR,输出到控制台 -->
    <Root level="ERROR">
      <AppenderRef ref="STDOUT"/>
      <!-- 如果需要全量日志同时输出到文件,可添加 <AppenderRef ref="file"/> -->
    </Root>
  </Loggers>
</Configuration>

3. 验证路径权限

手动确认C:\LogFolder目录存在,且运行Java进程的用户对该目录有读写权限,避免写入失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:03