SpringBoot教程(十九) | SpringBoot集成Slf4j日志门面
SpringBoot教程(十九) | SpringBoot集成Slf4j日志门面
- 一、概述
- 二、前言
- 三、引入依赖 (不需要额外引入了)
- 四、自定义Logback的配置文件(一般都需配置)
- 情况一:不配置任何关于logback的配置文件
- 情况二:配置关于logback的配置文件
- 五、如何使用
- (一)不使用 @Slf4j 注解
- (二)使用 @Slf4j 注解
一、概述
对于一个web项目来说,日志框架是必不可少的,日志的记录可以帮助我们在开发以及维护过程中快速的定位错误。
slf4j
,log4j
,logback
,JDK Logging
等这些日志框架都是我们常见的日志框架,本文主要介绍这些常见的日志框架关系和SpringBoot整合Sfl4j+logback的实践。
二、前言
从Spring Boot
的1.x版本开始,它就默认集成了Logback作为日志框架。这一默认配置在后续版本中得到了保持,尽管用户仍然有选择使用其他日志框架(如Log4j2)的自由。
本文也是主要讲 Logback(日志框架)+Slf4j(日志门面)
三、引入依赖 (不需要额外引入了)
在Spring Boot 1.X版本后 中使用logback+SLF4J作为日志记录,通常不需要额外引入依赖。
Spring Boot的设计理念之一就是“开箱即用”(Convention Over Configuration),它通过提供一系列的启动器(starters)来简化项目的依赖管理和配置。
对于日志记录,Spring Boot 1.X版本后 默认集成了SLF4J作为日志门面(Facade),并提供了logback作为日志实现的默认选择。
这意味着,当你创建一个基于Spring Boot 1.X的新项目时,只要你引入了spring-boot-starter
(或其包含日志功能的变体,如spring-boot-starter-web
),
Spring Boot就会自动配置logback和SLF4J,你无需手动添加这些依赖。
依赖包含情况
spring-boot-starter
:这是一个核心的Spring Boot启动器,它包含了Spring Boot的核心功能,包括自动配置支持、日志(logback+SLF4J)等。spring-boot-starter-web
:这个启动器用于开发Web应用程序,它包含了spring-boot-starter
,因此也间接包含了logback和SLF4J的依赖。
四、自定义Logback的配置文件(一般都需配置)
Spring Boot 会自动从类路径(classpath)中查找 logback-spring.xml、logback-classic.xml、logback.groovy 和 logback.xml 文件(按照顺序),并使用它们作为 Logback 的配置。
情况一:不配置任何关于logback的配置文件
- 默认日志级别:Spring Boot的默认日志级别为INFO
- 日志格式:Spring Boot在控制台上的默认日志输出格式可能因版本而异,但通常包含时间戳、日志级别、线程名称、日志输出者的名称(通常是类名或文件名)以及日志消息本身。
- 默认文件输出:如果不进行任何配置,Spring Boot通常不会将日志输出到文件中,而是仅输出到控制台
情况二:配置关于logback的配置文件
- 文件名:命名为
logback.xml
(一般正常情况下)- 位置:logback.xml 文件位于
src/main/resources
目录下( Spring Boot 会在启动时自动加载这个文件,而无需你在 application.yml 或 application.properties 中进行任何配置)
日志常用的五个级别,根据严重程度由低到高,依次为:debug(调试 ) < info(消息) < warn(警告) < error(错误) < fatal(严重错误)。
通常可以根据实际所需要的颗粒度的大小选择其中的几个,当前常用debug,info,warn,error4个级别。一般都是配置的info级别
logback.xml 具体内容
<?xml version="1.0" encoding="UTF-8"?>
<!-- 开启定时扫描,1分钟扫一次,修改日志配置文件后1分钟生效 -->
<configuration debug="false" scan="true" scanPeriod="60000"><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="LOG_HOME" value="../logs" /><property name="LOG_NAME" value="integration" /><!-- 彩色日志 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([%-10.10thread]){faint} %clr(%-5level) %clr(%-50.50logger{50}:%-3L){cyan} %clr(-){faint} %msg%n</pattern></encoder></appender><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_HOME}/${LOG_NAME}.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><fileNamePattern>${LOG_HOME}/${LOG_NAME}.%d{yyyy-MM-dd}.log</fileNamePattern><!--日志文件保留天数--><maxHistory>30</maxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-10.10thread] %-5level %-50.50logger{50}:%-3L - %msg%n</pattern></encoder></appender><!-- 日志输出级别 此处设置的为INFO级别 --><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /></root></configuration>
扩展:
如果你想要将logback.xml配置文件中的变量抽取到application.yml或application.properties中
可以 使用 springProperty
标签
例如
<configuration> <!-- 定义属性,从application.yml或application.properties中读取 --> <springProperty scope="context" name="customLogLevel" source="logging.custom.level" defaultValue="INFO"/> <!-- 使用该属性设置日志级别 --> <logger name="com.example.myapp" level="${customLogLevel}"/> <!-- 其他配置... -->
</configuration>
application.yml 示例:
logging: custom: level: DEBUG
或者,如果你使用的是application.properties:
logging.custom.level=DEBUG
五、如何使用
(一)不使用 @Slf4j 注解
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class MyClass { // 关键点private static final Logger logger = LoggerFactory.getLogger(MyClass.class); public void someMethod() { logger.debug("This is a debug message"); logger.info("This is an info message"); logger.warn("This is a warn message"); logger.error("This is an error message", new RuntimeException("Oops!")); }
}
(二)使用 @Slf4j 注解
- 1.需要引入Lombok依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>你的Lombok版本号</version> <scope>provided</scope>
</dependency>
- 2.具体使用
import lombok.extern.slf4j.Slf4j; @Slf4j
public class MyService { public void doSomething() { log.debug("This is a debug message"); log.info("This is an info message"); log.warn("This is a warn message"); log.error("This is an error message", new RuntimeException("Oops!")); }
}
参考文章
【1】SpringBoot项目引入logback进行项目日志管理
【2】SpringBoot整合Sfl4j+logback的实践
相关文章:
SpringBoot教程(十九) | SpringBoot集成Slf4j日志门面
SpringBoot教程(十九) | SpringBoot集成Slf4j日志门面 一、概述二、前言三、引入依赖 (不需要额外引入了)四、自定义Logback的配置文件(一般都需配置)情况一:不配置任何关于logback的配置文件情况二:配置关…...

科普文:深入理解ElasticSearch体系结构
概叙 Elasticsearch是什么? Elasticsearch(简称ES)是一个分布式、可扩展、实时的搜索与数据分析引擎。ES不仅仅只是全文搜索,还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等。 官网地址:…...
极限学习机(ELM)预测模型及其Python和MATLAB实现
### 一、背景 在机器学习和数据挖掘领域,预测模型旨在从过往数据中学习规律,以便对未知数据进行预测。随着数据量的激增和计算能力的提升,各种算法不断涌现。其中,极限学习机(Extreme Learning Machine, ELM࿰…...

基于Python的哔哩哔哩国产动画排行数据分析系统
需要本项目的可以私信博主,提供完整的部署、讲解、文档、代码服务 随着经济社会的快速发展,中国影视产业迎来了蓬勃发展的契机,其中动漫产业发展尤为突出。中国拥有古老而又璀璨的文明,仅仅从中提取一部分就足以催生出大量精彩的…...

Java导出Excel给每一列设置不同样式示例
Excel导出这里不讲,方法很多,原生的POI可以参照 Java原生POI实现的Excel导入导出(简单易懂) 这里只说怎么给Excel每一列设置不同的样式,比如下面这样的 直接上代码 Overridepublic void exportTemplate(HttpServletRe…...

2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)
1、前言 在 MATLAB 中进行绘图是一种非常常见且实用的操作,可以用来可视化数据、结果展示、分析趋势等。通过 MATLAB 的绘图功能,用户可以创建各种类型的图形,包括线图、散点图、柱状图、曲线图等,以及三维图形、动画等复杂的可视化效果。 在绘图之前,通常需要先准备好要…...

Datawhale AI夏令营 AI+逻辑推理 Task2总结
Datawhale AI夏令营 AI逻辑推理 Task2总结 一、大语言模型解题方案介绍 1.1 大模型推理介绍 推理是建立在训练完成的基础上,将训练好的模型应用于新的、未见过的数据,模型利用先前学到的规律进行预测、分类和生成新内容,使得AI在实际应…...

linux常使用的命令
关机命令 shutdown halt poweroff reboot grep 选项 参数 -l 显示所有包含关键字的文件名 -n 在匹配之前加上行号 -c 只显示匹配的行数 -v 显示不匹配的行 管道符 “|” 左边的输出作为右边的输入 例如:我们找个文件包含abc 但是不含有def的文件 grep …...
Ubuntu系统U盘安装与虚拟机安装
一、Ubuntu系统U盘安装 准备工作 下载Ubuntu镜像文件:从Ubuntu官方网站下载最新的LTS(长期支持)版本镜像文件(ISO),以确保系统的稳定性和长期支持。准备U盘:选择一个容量至少为8GB的U盘,并确保U盘中的数据已备份,因为接下来的操作会格式化U盘。制作启动U盘: Windows…...
FastDDS中的线程梳理
目录 线程预览 我们承担ROS,FastDDS,C,cmake等技术的项目开发和专业指导和培训,有10年相关工作经验,质量有保证,如有需要请私信联系。 线程预览 NameTypeCardinality线程名DescriptionEventGeneral每个Dom…...

Signac包-1.Analyzing PBMC scATAC-seq
–https://stuartlab.org/signac/articles/pbmc_vignette 好的,开始学习scATAC-seq的数据是怎么玩的了,先跑完Signac的教程,边跑边思考怎么跟自己的课题相结合。 留意更多内容,欢迎关注微信公众号:组学之心 数据和R…...
使用指定版本python创建虚拟机环境
安装python3.9 对于 Ubuntu/Debian,可以使用以下命令: sudo apt update sudo apt install python3.9 对于 CentOS,可能需要先启用 EPEL 存储库,然后使用以下命令: sudo yum install https://dl.fedoraproject.org/…...

【git】git常用命令提交规范
Git 是程序员工作中不可或缺的版本控制工具,以下是一些优化后的常用 Git 命令列表,旨在帮助你更高效地使用 Git 进行版本控制。 基础操作 拉取代码 git clone xxx.git创建分支 git branch dev切换分支 git checkout dev # 或者 git switch dev创建并切换…...

第一个Python Web程序
1、离线安装Django 由于Python是3.7版本,Django选择2.2.4版本,并且中间需要安装依赖包。全部安装包如下: 打开Anaconda Prompt,先进入Python3.7环境,然后依次安装各个包: 至此,Django离线安装成功。 2、编写第一个Django程序 2.1 创建Django项目 创建项目welcome时…...

vector深度剖析及模拟实现
目录 前言vector核心框架模拟实现1. 前期准备2. 构造和销毁补充: 隐式类型转换和多参数构造的区别 3. 迭代器相关4. 容器相关补充: memcpy拷贝问题 5. 元素访问6. vector的修改测试代码 总结 前言 本文重点模拟实现vector的核心接口, 帮助我们更好的理解底层逻辑, 以及对vecto…...

spring 中包自动扫描之 component-scan 解析
在 spring 中,为简化 bean 的配置,在 spring-context 模块下提供了包的自动扫描功能,将配置的包及其子包下的所有符合条件的类都注册到 BeanFactory 中。下面来看下具体是怎么实现的。 配置 <context:component-scan base-package"…...

【C语言】Linux 飞翔的小鸟
【C语言】Linux 飞翔的小鸟 零、环境部署 安装Ncurses库 sudo apt-get install libncurses5-dev壹、编写代码 代码如下: bird.c #include<stdio.h> #include<time.h> #include<stdlib.h> #include<signal.h> #include<curses.h>…...

mcasttest-tool组播检测工具
作者:广大 检测组播 mcasttest-tool是oracle组播检测工具,组播是oracle 11.2.0.2开始的新功能。 1、上传mcasttest工具解压并授权 [rootrac1 soft]# cd /u01/soft/ [rootrac1 soft]# tar -xvf mcasttest.tgz[rootrac1 soft]# chown -R grid:oinstall…...
ncnn 库编译的一些问题,使用交叉编译
一开始的问题是编译完程序,但是部分工具没有编译出来。 主要的问题是: 1. ncnn2in8 程序没有编译出来:主要原因应该是cmakelists.txt文件中对于的模块没打开on,或者这个模块没加进去编译: 添加以下 -DNCNN_BUILD_EXAMPLESON -…...

Python基础教程(一)
1.编程基础 1.1标识符 标识符是变量、函数、模块和其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命名规则,比如说: 1、标识符是由字母 (A~Z 和 a~z) 、下划线和数字组成,但第一个字符不 能是数字。 2、标识符不…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...

李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...

Linux入门课的思维导图
耗时两周,终于把慕课网上的Linux的基础入门课实操、总结完了! 第一次以Blog的形式做学习记录,过程很有意思,但也很耗时。 课程时长5h,涉及到很多专有名词,要去逐个查找,以前接触过的概念因为时…...

【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器
从本章节开始,进入到函数有多个参数的情况,前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参,ECX是整型的第一个参数的寄存器,那么多个参数的情况下函数如何传参,下面展开介绍参数为整型时候的几种情…...