SpringBoot日志

SpringBoot日志

日志框架

  • JUL:这是JavaSE平台提供的官方日志框架,也被称为JUL。配置相对简单,但不够灵活,性能较差。
  • Log4j:一个流行的日志框架,提供了灵活的配置选项,支持多种输出目标。
  • Logback:基于Log4j升级而来,提供了更多的功能和配置选项,性能优于Log4j。
  • Slf4j:(Simple Logging Facade for Java)简单日志门面,提供了一套日志操作的标准接口及抽象类,允许应用程序使用不同的底层日志框架。(不负责具体的日志技术的实现)

Logback日志框架入门

1)引入依赖

引入logback的依赖(springboot项目中无需引入,在springboot中已经传递了此依赖)

xml 复制代码
<!--logback依赖-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.5.18</version>
</dependency>

2)引入配置文件logback.xml

将logback.xml配置文件放入src/main/resources目录下;

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%logger显示日志记录器的名称, %msg表示日志消息,%n表示换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
		</encoder>
	</appender>

	<!-- 系统文件输出 -->
	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!-- 日志文件输出的文件名, %i表示序号 -->
			<FileNamePattern>D:/logback-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
			<!-- 最多保留的历史日志文件数量 -->
			<MaxHistory>30</MaxHistory>
			<!-- 最大文件大小,超过这个大小会触发滚动到新文件,默认为 10MB -->
			<maxFileSize>10MB</maxFileSize>
		</rollingPolicy>

		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
		</encoder>
	</appender>

	<!-- 日志输出级别 -->
	<root level="ALL">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="FILE" />
	</root>
</configuration>

3)定义日志记录对象Logger,记录日志

java 复制代码
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class LogTest {
    private static final Logger log = LoggerFactory.getLogger(LogTest.class);
    @Test
    public void testLog(){
        log.trace("trace...");
        log.debug("debug...");
        log.info("info...");
        log.warn("warn...");
        log.error("error...");
    }

}

运行单元测试,观察控制台中输出日志,如下:

日志框架不仅可以输出日志的信息,还包括:日志的输出时间、线程名、具体是在那个类中输出的日志。

Logback配置文件

我们可以通过对Logback.xml进行配置来控制输出的格式、位置以及日志开关的等级。

1).配置控制台输出相关信息:

xml 复制代码
<!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%logger显示日志记录器的名称, %msg表示日志消息,%n表示换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
		</encoder>
	</appender>

2).配置文件输出相关信息:

xml 复制代码
<!-- 系统文件输出 -->
	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!-- 日志文件输出的文件名, %i表示序号 -->
			<FileNamePattern>D:/logback-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
			<!-- 最多保留的历史日志文件数量 -->
			<MaxHistory>30</MaxHistory>
			<!-- 最大文件大小,超过这个大小会触发滚动到新文件,默认为 10MB -->
			<maxFileSize>10MB</maxFileSize>
		</rollingPolicy>

		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
		</encoder>
	</appender>

3).配置日志输出级别及日志输出位置:

xml 复制代码
<!-- 日志输出级别 -->
	<root level="ALL">
        <!-- 输出到控制台 -->
		<appender-ref ref="STDOUT" />
        <!-- 输出到文件 -->
		<appender-ref ref="FILE" />
	</root>

Logback日志级别

可以在配置文件logback.xml中,灵活的控制输出那些类型的日志。(大于等于配置的日志级别的日志才会输出)

日志级别指的是日志信息的类型,日志都会分级别,常见的日志级别如下(优先级由低到高):

日志级别 说明
trace 追踪,记录程序运行轨迹 【使用很少】
debug 调试,记录程序调试过程中的信息,实际应用中一般将其视为最低级别 【使用较多】
info 记录一般信息,描述程序运行的关键事件,如:网络连接、io操作 【使用较多】
warn 警告信息,记录潜在有害的情况 【使用较多】
error 错误信息 【使用较多】

SLF4J日志门面

不同日志框架的API接口和配置文件不同,如果多个日志框架同时存在,那么就不得不维护多套日志框架的配置文件。引入门面日志框架,提供了一套日志操作的标准接口及抽象类,此时我们就可以只维护一套日志文件的配置来适应底层真正实现功能的多套日志框架。(也就是说当底层实现框架发生改变时,不需要修改应用程序的代码)

在SpringBoot的配置文件application.yml中进行日志框架的配置

配置日志输出级别

yaml 复制代码
# 配置日志级别
logging:
  level:
    root: info

日志持久化

  1. 配置日志文件名
  2. 配置日志的存储目录
  • 配置日志名
yaml 复制代码
# 配置日志文件的路径和文件名
logging: 
  file: 
    name: logger/logger.log
  • 配置日志文件的保存路径(这种方式只能设置日志的路径,文件名为固定的spring.log)
yaml 复制代码
logging:
  file:
    path: D:/Code/JetBrains/IDEA2024.1_code/quickStart/log

需要注意的是当上述两个日志持久化的配置都配置的情况下,只有一个会生效(配置日志名)。

@Slf4j注解

通过lombok中提供的@Slf4j注解,可以简化定义日志记录对象Logger的这步操作。 添加了该注解,就相当于在类中定义了日志记录对象Logger:private static final Logger log = LoggerFactory. getLogger(Xxx. class);

相关推荐
JaguarJack12 小时前
开发者必看的 15 个困惑的 Git 术语(以及它们的真正含义)
后端·php·laravel
后端小张13 小时前
【JAVA 进阶】Mybatis-Plus 实战使用与最佳实践
java·spring boot·spring·spring cloud·tomcat·mybatis·mybatis plus
崎岖Qiu13 小时前
【设计模式笔记07】:迪米特法则
java·笔记·设计模式·迪米特法则
Victor35613 小时前
Redis(91)Redis的访问控制列表(ACL)是如何工作的?
后端
努力进修14 小时前
Rust 语言入门基础教程:从环境搭建到 Cargo 工具链
开发语言·后端·rust
Victor35614 小时前
Redis(90)如何配置Redis的身份验证?
后端
程序员爱钓鱼14 小时前
Python编程实战 - 函数与模块化编程 - 参数与返回值
后端·python·ipython
摇滚侠15 小时前
Spring Boot3零基础教程,SpringApplication 自定义 banner,笔记54
java·spring boot·笔记
程序员爱钓鱼15 小时前
Python编程实战 - 函数与模块化编程 - 局部变量与全局变量
后端·python·ipython
青云交15 小时前
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用
java·大数据·机器学习·数据存储·模型构建·游戏用户行为分析·游戏平衡优化