Log4j 从 2.23.1 更新到 2.24.0/1 -> 日志记录消失了

问题描述 投票:0回答:1

我有一个又大又旧的遗留项目,我们非常痛苦地更新到 log4j 2,并且使用了很多桥梁。

            <!-- LOGGING -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-1.2-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j2-impl</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-web</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jul-to-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

slf4j版本是2.0.16

log4j 2.24.0 的发行说明中是这样的文字:

桥梁 JUL-to-Log4j API 和 Log4j 1-to-Log4j API 将不再 可以修改Log4j Core默认的配置。如果这样的话 需要某个功能,必须显式启用它。

从 2.23.1 更新到 2.24.0 或 2.24.1 后,日志记录消失了。

我在文档中没有找到任何有关如何启用此桥接功能的提示。

log4j2 slf4j
1个回答
0
投票

注意:

log4j-1.2-api
log4j-jul
的“桥接”功能在
2.24.0
中并未禁用。这些桥仍然开箱即用,可将使用 Log4j 1 或
java.util.logging
编写的日志语句转发到 Log4j 2 API。 被禁用的是使用这些旧版 API 加载和修改日志记录实现的配置的能力。其背后的基本原理是,许多legacy库通过调用
j.u.l.Logger.setLevel()
org.apache.log4j.PropertyConfigurator.configure()
等方法来破坏用户配置。由于无法修改这些遗留库,因此桥接器的“配置”部分成为选择加入。

问题的可能原因

许多应用程序和库(可能包括您的应用程序和库)都包含与此类似的代码片段:

org.apache.log4j.PropertyConfigurator.configure(
        Main.class.getClassLoader().getResourceAsStream("log4j.properties"));

自从 Log4j 1.0 的第一个稳定版本已经自动加载

log4j.properties
文件并允许用户使用
log4j.configuration
系统属性指定备用位置以来,从未需要过这样的代码片段。此类片段应被删除并替换为以下选项之一:

  • 以本机 Log4j 2 Core 配置格式之一编写配置文件,并将其放置在类路径上的标准位置之一中。这是推荐的方式。
  • 以 Log4j 1 格式编写配置文件并将
    log4j.configuration
    系统属性指向它。如果您有很多用户并且不想强迫他们使用 Log4j 2 格式,则此选项可能很有用。如果您是唯一配置日志记录的人,则更容易切换到您选择的本机格式。
  • 以 Log4j 1 格式编写配置文件并将
    log4j1.compatibility
    系统属性设置为
    true
  • 直接在代码中使用
    o.a.l.l.core.config.Configurator

如果您确实想保留代码片段(我不建议这样做),您应该将

log4j1.compatibility
系统属性设置为
true

© www.soinside.com 2019 - 2024. All rights reserved.