错误 状态记录器重新配置失败:在“null”中的“null”处找不到“73d16e93”的配置

2022-09-02 12:12:29

我正在使用log4j2,jar文件如下:log4j-api-2.14.0.jar log4j-core-2.14.0.jar log4j-slf4j-impl-2.14.0.jar

执行以下行:LogManager.getLogger(“com.foo.Bar1”);

使用以下 VM 参数:-Dlog4j.configuration=test1.xml

配置文件 test1.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console1" target="SYSTEM_OUT">
            <PatternLayout
                pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <File name="MyFile" fileName="test1.txt">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="com.foo.Bar1" level="trace">
            <AppenderRef ref="Console1" />
            <AppenderRef ref="MyFile" />
        </Logger>
    </Loggers>
</Configuration>

当 java 文件启动错误状态记录器重新配置失败时,会发生以下错误:在“null”中的“null”处找不到“73d16e93”的配置

我知道“-Dlog4j.configuration=test1.xml”是错误的。“-Dlog4j.configurationFile=test1.xml”是正确的。但我不明白为什么当使用“-Dlog4j.configuration=test1.xml”时会出现错误。

为什么在使用 -Dlog4j.configuration=test1.xml 时发生错误。


答案 1

这是因为 期望文件位于类路径中,而期望它作为文件路径log4j.configurationlog4j.configurationFile

如果添加到 VM 参数,则可以看到它正在尝试加载的文件,并将打印其路径。这样,您就可以了解错误发生的原因。-Dlog4j2.debug=true


答案 2

Log4j 2 对 Log4j 1.2 配置文件具有实验性支持。如果您指定 -Dlog4j.configuration,则 Log4j 的 ConfigurationFactory 假定您要在兼容模式下运行,并查找 Log4j 1.x 格式的配置文件。如果您提供了Log4j2格式的文件,显然会失败,特别是如果您的项目中没有log4j-1.2-api,因为这是Log4j 1.x XML配置文件的配置类所在。


推荐