【问题标题】:Log4j 2 doesn't support log4j.properties file anymore?Log4j 2 不再支持 log4j.properties 文件了吗?
【发布时间】:2014-04-24 11:18:05
【问题描述】:

我正在使用 log4j 2.0-rc1 和 log4j.properties 文件运行示例,但 log4j lib 始终使用默认配置(日志级别、附加程序等)运行它。我还尝试将名称更改为log4j2.properties,但没有任何反应。

【问题讨论】:

    标签: java log4j log4j2


    【解决方案1】:

    Log4j 2 不再支持 Log4j v1 ".properties" 格式(然而,从 v2.4 开始,Log4j 支持 Property 格式,但其语法为 totally different from v1 format)。新格式是 XML、JSON 和 YAML,请参阅 the documentation(注意:如果您在名为“.properties”的文件中使用这些格式之一,可能会造成混淆)。

    要指定配置文件的位置,您是使用系统属性log4j.configurationFile、Log4j 类ConfigurationFactory 还是其他? 你读过this manual page吗?它解释说: 虽然 Log4j 2 配置语法与 Log4j 1.x 不同,但大多数(如果不是全部)相同的功能都可用。

    所以似乎不支持旧的 Log4j1.x log4j.propertiesfile,它必须迁移到 v2.x 格式。不过,查看我上面给出的链接中的示例,迁移似乎很容易。以下是摘录:

    Log4j v1.x 配置文件示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
    <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
            </layout>
        </appender>
        <category name="org.apache.log4j.xml">
            <priority value="info" />
        </category>
        <Root>
            <priority value ="debug" />
            <appender-ref ref="STDOUT" />
        </Root>
    </log4j:configuration>
    

    迁移到 Log4j v2 的相同配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
        <Appenders>
            <Console name="STDOUT" target="SYSTEM_OUT">
                <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
            </Console>
        </Appenders>
        <Loggers>
        <Logger name="org.apache.log4j.xml" level="info"/>
            <Root level="debug">
                <AppenderRef ref="STDOUT"/>
            </Root>
        </Loggers>
    </Configuration>
    

    【讨论】:

    • 这个应该去哪里/应该为 log4j2 命名文件?
    • 正如here 解释的那样,它可能被命名为“log4j2.yaml”、“log4j2.json”或“log4j2.xml”,具体取决于使用的格式。您可以使用您想要的任何文件名和任何文件位置(文件扩展名似乎必须符合要求),只要您在 Log4j 配置中提供此名称/位置
    • Log4j 2 现在支持 .properties 格式:logging.apache.org/log4j/2.0/manual/…
    • @Drew 谢谢,我更新了我的答案以反映这一点(属性格式回来了,但与 Log4j v1 相比语法不同)
    • @xav 我是唯一一个认为这种变化令人困惑的人吗(使用配置文件属性来判断配置文件在哪里——而不是 .property 文件)?我花了一个多小时试图为一个项目找到这个问题的答案,而答案就在我面前——但我不明白。
    【解决方案2】:

    从 2.4 版开始,Log4J2 现在再次支持 .property 文件。请参阅property configuration 的文档中的此处。

    使用属性进行配置

    从 2.4 版开始,Log4j 现在支持通过属性文件进行配置。请注意,属性语法与 Log4j 1 中使用的语法不同。与 XML 和 JSON 配置一样,属性配置根据插件和插件属性定义配置。

    【讨论】:

    • 读者要小心,正如本答案的文档摘录中所解释的那样,此文件中使用的格式与 Log4j v1 中的格式不同(我经常收到我的答案错误的 cmets 和这个是对的)
    【解决方案3】:

    Log4j 2 使用新的配置文件格式。您需要使用 XML(默认)、JSON(带有其他库),甚至 YAML(同样是库)。查看the documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 2017-10-26
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      相关资源
      最近更新 更多