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方案