我有一个又大又旧的遗留项目,我们非常痛苦地更新到 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 后,日志记录消失了。
我在文档中没有找到任何有关如何启用此桥接功能的提示。
注意:
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.configuration
系统属性指向它。如果您有很多用户并且不想强迫他们使用 Log4j 2 格式,则此选项可能很有用。如果您是唯一配置日志记录的人,则更容易切换到您选择的本机格式。log4j1.compatibility
系统属性设置为 true
。o.a.l.l.core.config.Configurator
。log4j1.compatibility
系统属性设置为 true
。