Spring6日志

  • Jakarta Commons Logging API 是一种 Java 日志记录抽象层,它允许开发者在运行时插入所需的日志框架,如 Log4j、Java Util Logging、SLF4J 等。该 API 提供了一个简单的日志记录接口,使得开发者无需关心底层使用的具体日志框架。
    使用 Jakarta Commons Logging API 的好处包括:
  1. 灵活性:开发者可以轻松更换底层日志框架,而无需修改大量代码。这有助于在项目生命周期中适应不同的日志需求。
  2. 简化日志配置:通过抽象层,开发者可以使用统一的日志记录接口,而无需关心每个日志框架的具体配置细节。
  3. 桥接不同日志框架:由于许多 Java 库和项目使用不同的日志框架,使用 Commons Logging 可以作为这些库之间的桥梁,减少日志框架之间的冲突。

区别

  • SLF4J(Simple Logging Facade for Java)和Jakarta Commons Logging API(也称为Apache Commons Logging或JCL)在Java日志记录领域中都是广泛使用的日志抽象层。它们的主要目标是为开发者提供一个统一的日志记录接口,以便在运行时能够灵活地插入或切换具体的日志实现框架。
  1. 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创建和配置过程。(不常用)

posted @ 2024-05-22 22:32  文采杰出  阅读(10)  评论(0编辑  收藏  举报