第二章 Spring Boot快速⼊⻔ —— Spring Boot使用Logback日志记录

前言:

Spring Boot 日志记录是应用程序开发中的重要部分,它有助于开发者跟踪应用程序的运行状态、调试问题和收集运行时的信息;在开发中,我们经常使用 System.out.println()来打印一些信息,这样是非常不好方法,因为大量的使用 System.out会增加资源的消耗。我们实际项目中使用的是 slf4j 的 logback 来输出日志,效率挺高的,Spring Boot 提供了一套日志系统,logback 是最优的选择。

一:slf4j 介绍

在Spring Boot应用程序中使用SLF4J(Simple Logging Facade for Java)进行日志记录是一种常见的做法。SLF4J本身是一个日志门面,它允许你在应用程序中使用统一的日志接口,而不必关心底层的日志实现(如Logback、Log4j等)。Spring Boot默认使用Logback作为日志实现。

二:日志级别

日志级别用于控制日志输出的详细程度。Spring Boot 支持的日志级别包括 TRACE、DEBUG、INFO、WARN、ERROR 和 FATAL。每个级别都表示了不同的日志重要性和详细程度。例如:

  • TRACE:最详细的日志级别,通常用于跟踪程序的执行流程。
  • DEBUG:提供调试信息的日志级别,通常用于开发过程中定位问题。
  • INFO:提供应用程序运行时的关键信息的日志级别。
  • WARN:表示潜在的有害情况的日志级别。
  • ERROR:表示错误或异常情况的日志级别。
  • FATAL:表示非常严重的错误,通常会导致应用程序的终止。

三:日志配置

在 Spring Boot 中,可以通过多种方式进行日志配置:

application.yml 文件:可以在这些配置文件中设置日志级别、输出格式和日志文件路径等.

或者在 application.yml 中:

# 日志配置
logging:
  level:
    com.qzh.demo: debug
    org.springframework: warn
    tech.powerjob.worker.background: warn
  config: classpath:logback.xml

logging.config:是用来指定项目启动的时候,读取哪个配置文件,这里指定的是日志配置文件是根路径下的logback.xml文件,关于日志的相关配置信息,都放在logback.xml文件中了。logging.level:是用来指定具体的 mapper 中日志的输出级别,上面的配置表示 com.qzh.demo包下日志输出级别为 debug。

添加依赖

spring Boot Starter已经包含了Logback,通常不需要添加额外的依赖。使用其他日志框架(如Log4j2),需要在pom.xml中排除Logback并添加所需的日志框架依赖。

使用Logback(默认)

通常不需要添加额外的依赖,因为Spring Boot Starter已经包含了Logback。

使用Log4j2
<dependencies>
    <!-- Spring Boot Starter (excluding Logback) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- Spring Boot Starter for Log4j2 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
</dependencies>

2.配置日志记录

使用Logback

默认情况下,Spring Boot会在src/main/resources目录下查找名为logback.xml的配置文件。以下是一个简单的Logback配置示例:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>

    <logger name="com.example.demo" level="debug" />
</configuration>
使用Log4j2

如果使用Log4j2,Spring Boot会在src/main/resources目录下查找名为log4j2.xml的配置文件。以下是一个简单的Log4j2配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
        <Logger name="com.example.demo" level="debug" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>
    </Loggers>
</Configuration>

四:日志输出格式

日志输出格式可以通过配置文件进行设置。常见的格式包括时间戳、日志级别、线程名称、类名、日志消息等。通过统一的输出格式,可以方便地查看和分析日志。

logback.xml 配置文件解析:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="log.path" value="./logs"/>
    <property name="console.log.pattern"
              value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>

    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${console.log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!-- 控制台输出 -->
    <appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-console.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-console.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大 1天 -->
            <maxHistory>1</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
        </filter>
    </appender>


    <!--系统操作日志-->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file_console" />
    </root>

</configuration>

在上面logback.xml`中,我们可以定义日志输出的格式、路径、控制台输出格式、文件大小、保存时长等等。下面来分析一下:

1.定义日志输出格式和存储路径:

 <property name="log.path" value="./logs"/>

  <property name="console.log.pattern"
              value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>

  <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>

我们来看一下这个定义的含义:首先定义一个格式,命名为 "log.pattern",该格式中 `%date` 表示日期,`%thread` 表示线程名,`%-5level` 表示级别从左显示5个字符宽度,`%logger{36}` 表示 logger 名字最长36个字符,`%msg` 表示日志消息,`%n` 是换行符。

然后再定义一下名为 "log.path" 文件路径,日志都会存储在该路径下,不管是 windows 系统还是 Linux 系统,日志存储的路径必须要是绝对路径。

2. 定义控制台输出

    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${console.log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

使用 `<appender>` 节点设置个控制台输出(`class="ch.qos.logback.core.ConsoleAppender"`)的配置,定义为 "console"。使用上面定义好的输出格式(console.log.pattern)来输出,使用 `${}` 引用进来即可。

3. 定义日志文件的相关参数

 <!-- 控制台输出 -->
    <appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-console.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-console.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大 1天 -->
            <maxHistory>1</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
        </filter>
    </appender>

使用 `<appender>` 定义一个名为 "file_console" 的文件配置,主要是配置日志文件保存的时间、单个日志文件存储的大小、以及文件保存的路径和日志的输出格式。

4. 定义日志输出级别

    <!--系统操作日志-->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file_console" />
    </root>

有了上面那些定义后,最后我们使用 `<logger>` 来定义一下项目中默认的日志输出级别,这里定义级别为 INFO,然后针对 INFO 级别的日志,使用 `<root>` 引用上面定义好的控制台日志输出和日志文件的参数。这样 logback.xml 文件中的配置就设置完了。

五:演示效果

小结:

综上所述,在Spring Boot项目中,使用Logback进行日志记录是非常常见和推荐的做法,Spring Boot 日志记录是一个灵活且强大的功能,可以帮助开发者更好地跟踪和管理应用程序的运行状态。通过合理的配置和使用,可以提高应用程序的可靠性和可维护性。

相关推荐
向前看-9 分钟前
验证码机制
前端·后端
xlsw_10 分钟前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹1 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫2 小时前
泛型(2)
java
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
南宫生2 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石2 小时前
12/21java基础
java
李小白662 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp2 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea