介绍
在开发后端项目时,打印日志是必不可少的。Spring Boot 项目中的日志框架常用的有 Log4j、Logback,本文使用 Logback 框架,该框架需要一个logback-spring.xml
的配置文件
本文教你从 0 到 1 写出一份自己的logback-spring.xml
准备
创建一个新的 Spring Boot 项目,版本号为 2.7.13 。结构如下:
pom 文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>xyz.kbws</groupId>
<artifactId>logback</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>logback</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
项目启动之后,输出下面的日志
接下来引入 logback 核心组件,因为 Spring Boot 自带 logback 组件,所以引入时不需要指定版本号
<!-- logback核心组件 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
然后,在 resources 目录下创建一个spring-logback.xml
文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
重启项目,看到控制台只输出一个 banner,就说明配置文件生效了
基础
输出日志到控制台
配置控制台的appender
logback 中 appender 是负责写日志的组件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 配置日志打印格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${PID:- } %logger{36} %-5level - %msg%n</pattern>
<charset>utf8</charset>
</encoder>
</appender>
</configuration>
设置打印的日志级别
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 配置日志打印格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${PID:- } %logger{36} %-5level - %msg%n</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
这时启动项目后,控制台就会有日志输出了:
添加logback的一些默认配置
上面的输出样式很丑,可以用 logback 提供的一些默认配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 默认的一些配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 配置控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- 配置输出级别,加入输出方式 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
重新启动后,发现好看多了
将日志输出到文件
将项目部署到服务器后,项目肯定是后台运行,这样就看不到控制台的输出了,所以将项目输出日志保存到文件中,有助于后面排查 Bug 或检查项目运行情况
定义应用名称、文件输出路径、文件名称
<!-- 定义应用名称,区分应用 -->
<property name="APP_NAME" value="logback-test"/>
<!--定义日志文件输出路径-->
<property name="LOG_PATH" value="${user.home}/logs/${APP_NAME}"/>
<!-- 定义日志文件名称和路径 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
将日志滚动输出到application.log文件中
<!-- 将日志滚动输出到application.log文件中 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件目的地 -->
<file>${LOG_FILE}</file>
<encoder>
<!-- 使用默认的输出格式打印 -->
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
注意:这里的输出格式要用FILE_LOG_PATTERN
而不是CONSOLE_LOG_PATTEN
不然写入文件的日志会乱码