java - Log4j 属性不适用于 SLF4J

标签 java maven logging log4j slf4j

我正在尝试将使用 log4j 1.2.6 的 Java 应用程序迁移到使用 SLF4J。首先,我只是想让它与 log4j 1.2.6 作为日志记录实现一起工作。 log4j 配置从数据库中加载,然后使用 PropertyConfigurator.configure() 进行设置。在尝试迁移到 SLF4J 之前,这一直运行良好。

但是,在我将日志记录调用转换为使用 SLF4J 并在我的 pom.xml 文件中添加所需的条目之后,log4j 实现似乎不受 PropertyConfigurator.configure() 调用的影响。该应用程序似乎正在使用 log4j 进行记录,但它只是记录到控制台,而不是基于 PropertyConfigurator.configure() 调用的记录方式。

有趣的是,如果我使用 log4J 日志调用,这些日志会按预期进行,使用通过 PropertyConfigurator.configure() 调用设置的配置。

这是我的代码片段;

import org.apache.log4j.PropertyConfigurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
public class Initialization extends HttpServlet {
private static final Logger log = LoggerFactory.getLogger ( Initialization.class );  
private static final org.apache.log4j.Logger log4j = org.apache.log4j.Logger.getLogger(Initialization.class);
...
PropertyConfigurator.configure ( logProps );

log4j.error("This gets logged as expected based on the log4J config set by the above call.");
log.error("This gets logged to the console.");

这是我的 pom.xml 文件中的内容:

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency> 
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version> 
</dependency>

出于某种原因,以编程方式设置的 log4J 配置不会影响 SLF4J 使用的 log4J 实现。或者 SLF4J 没有使用 log4J 实现。

我也试过从文件加载 log4j 属性:

PropertyConfigurator.configure ( sc.getRealPath ( "/WEB-INF/properties/log4j.props" ) );

但这有相同的结果。我还在新应用程序中尝试过同样的事情,SLF4J 日志语句正确使用了 log4j 设置并正确记录。

最佳答案

我通过将以下内容添加到 weblogic.xml 文件解决了这个问题:

<prefer-application-packages>
    <package-name>org.slf4j</package-name>
</prefer-application-packages>

关于java - Log4j 属性不适用于 SLF4J,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344181/

相关文章:

java - 使用 java servlet 过滤器操作 css 文件的最佳方法是什么?

java - 禁用特定 java 包的所有 checkstyle 检查

java - 无法通过持久性删除来删除 jpa 子实体

java - 存储过程调用期间使用 CallableStatement 的 SQL 语句无效

java - 过时的 Maven Artifact 的安全性

logging - 将格式套用至Unix Shell

java - 项目制作jar文件后出错

java - Eclipse Alfresco 中的快速应用程序开发(热重载)

python - 如何使用更多信息记录 APScheduler 警告?

perl - 从文本文件中持续读取数据的有效方法