- Jakarta Commons Logging API 是一种 Java 日志记录抽象层,它允许开发者在运行时插入所需的日志框架,如 Log4j、Java Util Logging、SLF4J 等。该 API 提供了一个简单的日志记录接口,使得开发者无需关心底层使用的具体日志框架。
使用 Jakarta Commons Logging API 的好处包括:
- 灵活性:开发者可以轻松更换底层日志框架,而无需修改大量代码。这有助于在项目生命周期中适应不同的日志需求。
- 简化日志配置:通过抽象层,开发者可以使用统一的日志记录接口,而无需关心每个日志框架的具体配置细节。
- 桥接不同日志框架:由于许多 Java 库和项目使用不同的日志框架,使用 Commons Logging 可以作为这些库之间的桥梁,减少日志框架之间的冲突。
区别
- SLF4J(Simple Logging Facade for Java)和Jakarta Commons Logging API(也称为Apache Commons Logging或JCL)在Java日志记录领域中都是广泛使用的日志抽象层。它们的主要目标是为开发者提供一个统一的日志记录接口,以便在运行时能够灵活地插入或切换具体的日志实现框架。
- SLF4J本身并不提供日志实现,而是通过绑定(binding)机制与具体的日志框架集成。开发者需要在项目中引入相应的SLF4J绑定包(如log4j-slf4j-impl),以便将SLF4J的日志请求转发给具体的日志框架。
Jakarta Commons Logging API在默认情况下会尝试自动搜索并使用Log4j作为日志实现,如果找不到Log4j,则会回退到使用JDK Logging。这种自动搜索和回退的机制使得Commons Logging在某些情况下能够更方便地集成,但也可能导致一些不可预见的行为。
参考文档:https://www.bookstack.cn/read/spring-5-framework-doc/2-2-3.md#2.3.2 日志
实现日志
Log4j的1.x版本已经寿终正寝,以下的内容特指Log4j 2
- 使用JCL和Log4j
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.7</version>
</dependency>
<!-- 如果还想使用SLF4J,还需要以下依赖关系:-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.7</version>
</dependency>
</dependencies>
log4j-slf4j-impl是一个桥接包,它的主要作用是连接日志框架SLF4J和日志实现Log4j。在Java项目中,SLF4J通常作为日志框架的规范接口,而Log4j则是具体的日志实现。由于不同的日志实现之间可能存在互不兼容的问题,因此需要一个桥接包来适配它们,使得SLF4J能够正常使用Log4j进行日志记录。当你通过maven引入log4j-slf4j-impl,maven会自动下载依赖的slf4j日志框架.
- log4j2配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.springframework.beans.factory" level="DEBUG"/>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
解释:
Root Logger 是 Log4j 2 中的特殊 Logger,它捕获所有未被其他特定 Logger 捕获的日志事件。在这个配置中,Root Logger 的日志级别被设置为 ERROR,这意味着只有 ERROR 级别的日志会被记录。
<Logger name="org.springframework.beans.factory" level="DEBUG"/>
这定义了一个特定的日志记录器(Logger)用于 org.springframework.beans.factory 包及其子包中的类。日志级别设置为 DEBUG,意味着这个包下的所有类产生的 DEBUG 级别及以上的日志(如 INFO, WARN, ERROR)都会被记录。在Spring框架中,org.springframework.beans.factory 是与Bean工厂相关的包,用于处理应用程序上下文的bean定义和创建。因此,将此日志级别设置为 DEBUG 可能会输出大量的日志,主要用于调试Spring的Bean创建和配置过程。(不常用)