第二章 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 日志记录是一个灵活且强大的功能,可以帮助开发者更好地跟踪和管理应用程序的运行状态。通过合理的配置和使用,可以提高应用程序的可靠性和可维护性。

相关推荐
Eiceblue几秒前
Java 实现Excel转HTML、或HTML转Excel
java·html·excel·idea
陈平安Java and C5 小时前
MyBatisPlus
java
秋野酱5 小时前
如何在 Spring Boot 中实现自定义属性
java·数据库·spring boot
安的列斯凯奇6 小时前
SpringBoot篇 单元测试 理论篇
spring boot·后端·单元测试
Bunny02126 小时前
SpringMVC笔记
java·redis·笔记
架构文摘JGWZ6 小时前
FastJson很快,有什么用?
后端·学习
BinaryBardC6 小时前
Swift语言的网络编程
开发语言·后端·golang
feng_blog66886 小时前
【docker-1】快速入门docker
java·docker·eureka
邓熙榆7 小时前
Haskell语言的正则表达式
开发语言·后端·golang
枫叶落雨2228 小时前
04JavaWeb——Maven-SpringBootWeb入门
java·maven