将 log4j 1.2.x 迁移到 log4j 2.16.0

Posted

技术标签:

【中文标题】将 log4j 1.2.x 迁移到 log4j 2.16.0【英文标题】:Migrating log4j 1.2.x to log4j 2.16.0 【发布时间】:2022-01-20 02:49:47 【问题描述】:

使用 PropertyConfigurator.configure 方法加载所有位于系统特定位置的 log4j 文件。

static 
   PropertyConfigurator.configure("C:/users/log4j.properties").

从外部位置配置 log4j 属性的替代方法是什么?

在 log4j2 中使用 PropertyConfigurator.configure 的替代方法是什么?

【问题讨论】:

这能回答你的问题吗? How to configure log4j with a properties file 从外部位置加载 log4j.properties。 以上链接特定于 log4j 1.x 版本,我们支持 PropertyConfigurator 类。但是在 log4j 2.x 中不存在这种支持,那么应该采取什么方法来实现相同的目标 【参考方案1】:

以下是加载外部 log4j 文件的两种方式。

在访问 Logger 语句之前使用,可能在静态块中

    System.setProperty("log4j.configurationFile","file:C:/path/log4j2.properties");
    
    ConfigurationSource source = new ConfigurationSource(new FileInputStream("C:/path/log4j2.properties"), new File(C:/path/log4j2.properties));
    Configurator.initialize(null, source);
    

发布这些方法,希望对其他人有用。

【讨论】:

【参考方案2】:

添加新的依赖项后你必须做一些代码更改。

在 pom.xml 中添加如下依赖

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.16.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.16.0</version>
    </dependency>

import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;替换你的java类文件导入import org.apache.log4j.Logger;

然后将private static final Logger logger = Logger.getLogger(Test.class);替换为private static final Logger logger = LogManager.getLogger(Test.class);

更多参考:click here

【讨论】:

由于包结构从 log4j1.x 到 log4j2.x 发生了变化,所以我们更改了这些声明,但我的问题与更改包无关 来自 Log4J 2 的文档:logging.apache.org/log4j/2.0/faq.html#reconfig_from_code

以上是关于将 log4j 1.2.x 迁移到 log4j 2.16.0的主要内容,如果未能解决你的问题,请参考以下文章

Log4j 1.x到Log4j 2.1.1迁移问题

在 log4j 1.2 到 log4j 2 的迁移中,如何处理 DailyRollingFileAppender 类?

log4j 2 迁移桥 log4j-1.2-api.jar 缺少类

将项目从 log4j 迁移到 slf4j+log4j

从 log4j 1.2.17 迁移后的 log4j 2.2 问题

从log4j日志无缝迁移至logback