Log4J 仍然与 Log4j2 一起运行

Posted

技术标签:

【中文标题】Log4J 仍然与 Log4j2 一起运行【英文标题】:Log4J still running with Log4j2 【发布时间】:2017-01-25 18:43:20 【问题描述】:

我有一个 spring-boot 项目,我正在从 Log4j 过渡到 Log4j2。我已按照文档here 中的步骤进行操作。具体来说,我已经修改了我的 log4j.xml 以符合 log4j2 标准并将其重命名为 log4j2.xml 我通过使用我的 log4j2.xml 中的<Configuration status="debug"> 设置启用了 log4j2 上的调试,因此我可以看到 log4j2 启动。在启动我的 Spring Boot 应用程序时,我使用以下系统设置:

-Dlog4j.configurationFile=log4j2.xml -Dorg.jboss.logging.provider=log4j2

我可以在调试输出中看到我的 log4j2.xml 启动 appenders 等,然后是最终 log4j2 消息说明:

日志提供者:通过系统属性找到的 org.jboss.loggin.Log4j2LoggerProvider

我正在使用以下罐子:

编译组:'org.slf4j',名称:'slf4j-log4j12',版本:'1.7.12'

编译组:'org.apache.logging.log4j',名称:'log4j-api',版本:'2.4.1'

编译组:'org.springframework.boot',名称:'spring-boot-starter-log4j2',版本:'1.4.0.RELEASE'

但是,我仍然收到来自 Log4j 的消息:

log4j:WARN 找不到记录器的附加程序 log4j:WARN 请正确初始化 log4j 系统 log4j WARN 请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig 了解更多信息

所以我的根本问题是如何关闭 log4j 并只使用 log4j2?我会从 log4j2 收到一条消息,当我正确配置它时会明确告诉我?使用 Log4j2 是否缺少任何特殊配置?

【问题讨论】:

删除除spring-boot-starter-log4j2之外的所有日志依赖项。 【参考方案1】:

您必须仅将这些依赖项用于 log4j2。

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>$log4j2.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>$log4j2.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>$log4j.slf4j.impl.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>$log4j2.version</version>
            <scope>runtime</scope>
        </dependency>

您还需要从 spring-boot 中排除 spring-boot-starter-logging。像这样

【讨论】:

【参考方案2】:

Log4j2 常见问题解答现在在 excluding conflicting dependencies 上有一个项目。

我认为你需要这个:

<dependencies>
  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

【讨论】:

【参考方案3】:

我的项目正在使用带有 spring-boot 的 log4j2。

以下是 pom.xml 的一部分。请尝试一下。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
</dependencies>

【讨论】:

以上是关于Log4J 仍然与 Log4j2 一起运行的主要内容,如果未能解决你的问题,请参考以下文章

log4j与log4j2

log4j与log4j2性能对比及log4j升级至log4j2方案

log4j2 配置简要分析

log4j2日志发给kafka

将 log4j2 与 slf4j 一起使用:java.lang.***Error

Log4j2 - 配置