当前位置: 首页 > news >正文

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的配置文件

  1. 文件名:命名为 logback.xml (一般正常情况下)
  2. 位置: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教程&#xff08;十九&#xff09; | SpringBoot集成Slf4j日志门面 一、概述二、前言三、引入依赖 (不需要额外引入了)四、自定义Logback的配置文件&#xff08;一般都需配置&#xff09;情况一&#xff1a;不配置任何关于logback的配置文件情况二&#xff1a;配置关…...

科普文:深入理解ElasticSearch体系结构

概叙 Elasticsearch是什么&#xff1f; Elasticsearch&#xff08;简称ES&#xff09;是一个分布式、可扩展、实时的搜索与数据分析引擎。ES不仅仅只是全文搜索&#xff0c;还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等。 官网地址&#xff1a;…...

极限学习机(ELM)预测模型及其Python和MATLAB实现

### 一、背景 在机器学习和数据挖掘领域&#xff0c;预测模型旨在从过往数据中学习规律&#xff0c;以便对未知数据进行预测。随着数据量的激增和计算能力的提升&#xff0c;各种算法不断涌现。其中&#xff0c;极限学习机&#xff08;Extreme Learning Machine, ELM&#xff0…...

基于Python的哔哩哔哩国产动画排行数据分析系统

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

Java导出Excel给每一列设置不同样式示例

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

2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

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

Datawhale AI夏令营 AI+逻辑推理 Task2总结

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

linux常使用的命令

关机命令 shutdown halt poweroff reboot grep 选项 参数 -l 显示所有包含关键字的文件名 -n 在匹配之前加上行号 -c 只显示匹配的行数 -v 显示不匹配的行 管道符 “|” 左边的输出作为右边的输入 例如&#xff1a;我们找个文件包含abc 但是不含有def的文件 grep …...

Ubuntu系统U盘安装与虚拟机安装

一、Ubuntu系统U盘安装 准备工作 下载Ubuntu镜像文件:从Ubuntu官方网站下载最新的LTS(长期支持)版本镜像文件(ISO),以确保系统的稳定性和长期支持。准备U盘:选择一个容量至少为8GB的U盘,并确保U盘中的数据已备份,因为接下来的操作会格式化U盘。制作启动U盘: Windows…...

FastDDS中的线程梳理

目录 线程预览 我们承担ROS&#xff0c;FastDDS&#xff0c;C&#xff0c;cmake等技术的项目开发和专业指导和培训&#xff0c;有10年相关工作经验&#xff0c;质量有保证&#xff0c;如有需要请私信联系。 线程预览 NameTypeCardinality线程名DescriptionEventGeneral每个Dom…...

Signac包-1.Analyzing PBMC scATAC-seq

–https://stuartlab.org/signac/articles/pbmc_vignette 好的&#xff0c;开始学习scATAC-seq的数据是怎么玩的了&#xff0c;先跑完Signac的教程&#xff0c;边跑边思考怎么跟自己的课题相结合。 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 数据和R…...

使用指定版本python创建虚拟机环境

安装python3.9 对于 Ubuntu/Debian&#xff0c;可以使用以下命令&#xff1a; sudo apt update sudo apt install python3.9 对于 CentOS&#xff0c;可能需要先启用 EPEL 存储库&#xff0c;然后使用以下命令&#xff1a; sudo yum install https://dl.fedoraproject.org/…...

【git】git常用命令提交规范

Git 是程序员工作中不可或缺的版本控制工具&#xff0c;以下是一些优化后的常用 Git 命令列表&#xff0c;旨在帮助你更高效地使用 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 中&#xff0c;为简化 bean 的配置&#xff0c;在 spring-context 模块下提供了包的自动扫描功能&#xff0c;将配置的包及其子包下的所有符合条件的类都注册到 BeanFactory 中。下面来看下具体是怎么实现的。 配置 <context:component-scan base-package"…...

【C语言】Linux 飞翔的小鸟

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

mcasttest-tool组播检测工具

作者&#xff1a;广大 检测组播 mcasttest-tool是oracle组播检测工具&#xff0c;组播是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 库编译的一些问题,使用交叉编译

一开始的问题是编译完程序&#xff0c;但是部分工具没有编译出来。 主要的问题是&#xff1a; 1. ncnn2in8 程序没有编译出来&#xff1a;主要原因应该是cmakelists.txt文件中对于的模块没打开on&#xff0c;或者这个模块没加进去编译: 添加以下 -DNCNN_BUILD_EXAMPLESON -…...

Python基础教程(一)

1.编程基础 1.1标识符 标识符是变量、函数、模块和其他对象的名称。Python中标识符的命名不是随意的&#xff0c;而是要遵守一定的命名规则&#xff0c;比如说: 1、标识符是由字母 (A~Z 和 a~z) 、下划线和数字组成&#xff0c;但第一个字符不 能是数字。 2、标识符不…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...