简单地将slf4j添加到pom.xml中如何 Package log4j?

gdx19jrr  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(241)

从我在示例springpom.xml文件中看到的情况来看,它们为slf4j和log4j添加了一些条目,并且当您在spring应用程序中使用log4j时,它将被slf4j库 Package 。
谁能给我解释一下这是怎么神奇地发生的?

mi7gmzs6

mi7gmzs61#

Spring仍然使用commons-logging进行所有内部日志记录(向后兼容性)。如果您希望使用其他日志记录框架(log4j),则需要桥接commons logging到您选择的框架的调用。否则,您将不得不维护多个日志记录配置。
slf4j充当各种日志框架(jullog4jjcllogback)的简单外观,并允许您在部署时插入所需的日志框架。
与使用第三方框架强加的日志框架实现不同,您提供了slf4j's桥实现,该实现的行为类似于真实的情况,但实际上只是将日志调用转发到slf4j或其具体绑定。
Maven pom.xml的日志记录部分通常如下所示:

<!-- remove the real commons-logging from classpath -->
<!-- declare as provided or exclude from spring jars -->
<dependency>
    <artifactId>commons-logging</artifactId>
    <groupId>commons-logging</groupId>
    <version>1.0</version>
    <scope>provided</scope>
</dependency>

<!-- add slf4j interfaces to classpath -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.4</version>
    <scope>compile</scope>
</dependency>

<!-- add commons logging to slf4j bridge to classpath --> 
<!-- acts as jcl but routes commons-logging calls to slf4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.6.4</version>
    <scope>runtime</scope>
</dependency>

<!-- add log4j binding to classpath -->
<!-- routes slf4j calls to log4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
    <scope>runtime</scope>
</dependency>

<!-- add log4j to classpath -->
<!-- does the logging -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>

这与Spring容器无关,也与依赖注入无关,它是纯粹的类路径、类加载器的东西...
请参阅thefollowing链接以了解更多详细信息。

brgchamk

brgchamk2#

slf4j是一个日志记录API,它什么都不做,只是一堆接口。log4j是一个日志记录系统,有具体的类。有一个slf4j-log4j库,它使用log4j作为slf4j API的后端。
有些项目显式地依赖于log4j,它们调用具体的类。因此,你不能为你的项目使用另一个后端(例如logback或j.u.l或apache commons或其他),你只明智地使用slf4j API。
a trick通过一个mock实现(桥)来替换log4j类,它只是简单地将所有调用重定向到sl4j。在maven中,你只需要声明一个版本号非常高的依赖项,这个mock被认为是超现代的log4j库。

hs1rzwqc

hs1rzwqc3#

尝试添加:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

相关问题