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

Log4j 1.x配置文件报错及自定义属性优先级配置咨询

Log4j 1.x配置解析错误与自定义属性引用问题

先看你遇到的配置解析错误,这是因为你用了Log4j 2的配置格式来写Log4j 1.x的配置文件,导致Log4j 1.x无法识别根元素,进而初始化失败。

一、解决配置文件解析错误

Log4j 1.x的XML配置有严格的格式要求:

  • 根元素必须是<log4j:configuration>,而不是<Configuration>
  • 需要在文件开头声明对应的DTD

修正后的log4j.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="threshold" value="info" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level Line: %L - %msg%n" />
        </layout>
    </appender>
    <appender name="LOGFILE" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="c:/temp/logfile.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="2MB" />
        <param name="MaxBackupIndex" value="2" />
        <priority value="WARN" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level Line: %L - %msg%n" />
        </layout>
    </appender>
    <appender name="UNMAPFILE" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="c:/temp/unmapped.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="2MB" />
        <param name="MaxBackupIndex" value="2" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
        </layout>
    </appender>
    <category name="com.ma.dev" additivity="false">
        <priority value="INFO" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="LOGFILE" />
    </category>
    <root>
        <priority value="WARN" />
        <appender-ref ref="UNMAPFILE" />
    </root>
</log4j:configuration>

二、关于自定义属性引用的可行性

你想在<priority value="${myinfo}" />里引用自定义属性,Log4j 1.x本身不支持这种内部属性的直接引用——它的XML配置不会自动解析${}格式的内部属性。如果要实现类似功能,有几种方案:

  • 使用系统属性:把myinfo设置为JVM系统属性(比如启动时加-Dmyinfo=INFO),然后在配置里写<priority value="${myinfo}" />,Log4j 1.x会自动解析系统属性。
  • 自定义PropertyConfigurator:继承org.apache.log4j.PropertyConfigurator,在加载配置前手动替换配置文件里的自定义属性占位符。
  • 构建时替换:用Maven或Ant的资源过滤功能,在构建项目时自动把配置文件里的${myinfo}替换成对应的值。
  • 升级到Log4j 2:Log4j 2原生支持配置文件内部的属性定义和引用,也就是你现在写的<Properties>+${myinfo}的方式,而且Log4j 2的性能和功能都比1.x强很多,这是最推荐的方案。

修正配置文件后,你的Java代码就能正常输出日志了,再根据需求选择合适的属性引用方案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:53:13