Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)

一、Logback

  1. 在 Spring Boot 中,日志框架默认使用的是 Logback,Spring Boot 提供了对日志配置的简化

  2. Spring Boot 默认会将日志输出到控制台,并且日志级别为 INFO

  3. 可以在 application.yamlapplication.properties 文件中进行日志配置

  4. 如果需要自定义日志配置,可以使用 logback-spring.xml 文件,Spring Boot 会自动加载该文件


二、日志级别

1、基本介绍
(1)INFO
  1. 一般信息,用于记录应用程序的运行状态

  2. 适用于记录应用程序的关键事件,例如,启动、关闭、重要配置加载等

  3. 用于提供足够信息,帮助了解应用状态,同时避免过多细节

(2)WARN
  1. 警告信息,表示潜在的问题

  2. 适用于记录潜在的问题,例如,配置不当、资源不足等,这些问题不会立即影响运行,但需关注

  3. 用于帮助发现并预防潜在问题

(3)ERROR
  1. 错误信息,表示发生了错误,但应用程序仍可运行

  2. 适用于记录严重错误,如数据库连接失败、关键业务逻辑异常等

  3. 用于快速定位和解决重大问题

(4)DEBUG
  1. 调试信息,用于开发阶段

  2. 适用于调试时,记录详细执行流程、变量值等

  3. 通常关闭,避免日志量过大,必要时可临时开启

(5)TRACE
  1. 最详细的日志信息,通常用于调试

  2. 适用于记录最详细的执行信息,用于深度调试

  3. 一般不开启,除非有特殊需求

2、小结
  1. 应选择合适的日志级别以确保既能捕获关键信息,又不会产生过多冗余日志

  2. 生产环境通常设置为 INFO

  3. 可根据需求调整特定包的日志级别,例如,将某些复杂模块设为 DEBUG


三、Spring Boot 自定义日志打印

1、配置文件
  • logback-spring.xml 文件中配置如下内容
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 定义日志输出格式 --><property name="CONSOLE_PATTERN" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %m%n"/><property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5p %logger{1}:%line - %m%n"/><!-- 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_PATTERN}</pattern></encoder></appender><!-- 每日滚动文件输出 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>d:/my-logs/application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>d:/my-logs/application.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory> <!-- 保留历史日志文件的最大天数 --></rollingPolicy><encoder><pattern>${FILE_PATTERN}</pattern></encoder></appender><!-- 根日志配置 --><root level="info"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/></root></configuration>
2、测试代码
@Component
public class LogTest {private static final Logger logger = LoggerFactory.getLogger(LogTest.class);@PostConstructpublic void test1() {logger.debug("This is a debug message");logger.info("This is an info message");logger.warn("This is a warning message");logger.error("This is an error message");}
}

四、Spring Boot 自定义日志打印解读

1、配置文件
(1)定义日志输出格式
<property name="CONSOLE_PATTERN" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %m%n"/>
<property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5p %logger{1}:%line - %m%n"/>
  • CONSOLE_PATTERN 是控制台日志的输出格式
  1. %-5p:日志级别(例如,INFO、ERROR),左对齐,占 5 个字符

  2. %d{yyyy-MM-dd HH:mm:ss}:日志时间戳

  3. %m:日志消息

  4. %n:换行符

# 输出示例[INFO ] 2023-10-01 12:34:56 - This is a log message
  • FILE_PATTERN 是文件日志的输出格式。
  1. %d{yyyy-MM-dd HH:mm:ss}:日志时间戳

  2. [%thread]:当前线程名

  3. %-5p:日志级别

  4. %logger{1}:%line:日志记录器的名称(只显示最后一部分)和代码行号

  5. %m:日志消息

  6. %n:换行符

# 输出示例2023-10-01 12:34:56 [main] INFO  com.example.MyClass:42 - This is a log message
(2)控制台输出配置
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_PATTERN}</pattern></encoder>
</appender>
  1. CONSOLE:定义一个名为 CONSOLE 的日志输出目标,输出到控制台

  2. ConsoleAppender:将日志输出到控制台

  3. encoder:定义日志的输出格式,使用前面定义的 CONSOLE_PATTERN

(3)文件输出配置
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>d:/my-logs/application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>d:/my-logs/application.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>${FILE_PATTERN}</pattern></encoder>
</appender>
  1. FILE:定义一个名为 FILE 的日志输出目标,输出到文件

  2. RollingFileAppender:支持日志文件滚动(按时间或大小分割)

  3. file:当前日志文件的路径为 d:/my-logs/application.log

  4. rollingPolicy:定义日志滚动策略

  5. TimeBasedRollingPolicy:按时间滚动日志文件

  6. fileNamePattern:滚动后的日志文件命名格式,例如 application.2023-10-01.log

  7. maxHistory:保留最近 30 天的日志文件,超过 30 天的文件会被自动删除

  8. encoder:定义日志的输出格式,使用前面定义的 FILE_PATTERN

(4)根日志配置
<root level="info"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/>
</root>
  1. root:定义根日志记录器

  2. level="info":设置日志级别为 INFO,即只记录 INFO 及以上级别(例如,WARN、ERROR)的日志

  3. appender-ref:将日志输出到 CONSOLEFILE 两个目标

2、测试代码
(1)创建 Logger 实例
private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
  1. LoggerFactory 是 SLF4J 提供的工厂类,用于创建 Logger 实例

  2. getLogger(LogTest.class) 方法会根据传入的类(LogTest.class)创建一个与该类关联的 Logger 实例

  3. 日志输出时会自动带上类名(LogTest),方便定位日志来源

(2)打印日志
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 异步编程:如何将同步文件操作函数无缝转换为异步版本

在 Python 的异步编程世界中,os.path 模块的同步文件操作函数常常让我们陷入两难境地:直接使用它们会阻塞事件循环,降低程序性能;但这些函数又如此方便实用。今天,我将带你探索如何巧妙地将这些同步函数转换为异步版本,让你的异步程序既能享受高效的事件处理,又能无缝利…

CUDA概览

一、CUDA 是什么&#xff1f; CUDA&#xff08;Compute Unified Device Architecture&#xff0c;计算统一设备架构&#xff09;是 NVIDIA 于2006年推出的并行计算平台与编程模型&#xff0c;旨在通过 GPU 的大规模并行计算能力加速科学计算、数据处理、人工智能等领域的计算任…

CSS3学习教程,从入门到精通, 学院网站完整项目 - HTML5 + CSS3 实现(25)

学院网站完整项目 - HTML5 CSS3 实现 下面是一个完整的学院网站项目&#xff0c;包含主页、新闻列表页、新闻详情页和视频宣传页的实现。我将按照您的要求提供详细的代码和注释。 项目结构 college-website/ ├── index.html # 主页 ├── news-list.html …

Ubuntu离线安装mysql

在 Ubuntu 24.04 上离线安装 MySQL 的步骤如下&#xff08;支持 MySQL 8.0 或 8.4&#xff09;&#xff1a; 一.安装方法 此次安装是按照方法一安装&#xff0c;其它方法供参考&#xff1a; 安装成功截图&#xff1a; 安全配置截图&#xff1a; sudo mysql_secure_installat…

SQL Server 2022 读写分离问题整合

跟着热点整理一下遇到过的SQL Server的问题&#xff0c;这篇来聊聊读写分离遇到的和听说过的问题。 一、读写分离实现方法 1. 原生高可用方案 1.1 Always On 可用性组&#xff08;推荐方案&#xff09; 配置步骤&#xff1a; -- 1. 启用Always On功能 USE [master] GO ALT…

【前端扫盲】postman介绍及使用

Postman 是一款专为 API 开发与测试设计的 全流程协作工具&#xff0c;程序员可通过它高效完成接口调试、自动化测试、文档管理等工作。以下是针对程序员的核心功能介绍和应用场景说明&#xff1a; 一、核心功能亮点 接口请求构建与调试 支持所有 HTTP 方法&#xff08;GET/POS…

IdeaVim-AceJump

‌AceJump 是一款专为IntelliJ IDEA平台打造的开源插件&#xff0c;旨在通过简单的快捷键操作帮助用户快速跳转到编辑器中的任何符号位置&#xff0c;如变量名、方法调用或特定的字符串‌。无论是大型项目还是日常编程&#xff0c;AceJump 都能显著提升你的代码导航速度和效率。…

[C语言入门] 结构体

目录 1. 啥是结构体 2. 啥是结构体变量 3. 创建结构体变量的小细节 3.1 创建全局结构体变量&#xff08;不推荐&#xff09; 3.2 创建局部结构体变量&#xff08;不推荐&#xff09; 3.3 创建局部结构体变量Plus 4. 结构体在内存里面咋存&#xff1f; 5. 结构体作为参数…

贤小二c#版Yolov5 yolov8 yolov10 yolov11自动标注工具 + 免python环境 GPU一键训练包

贤小二c#版yolo标注训练工具集 欢迎使用贤小二AI标注训练系统v2.0 本课程所有演示程序全部免费 1、这节课程主要演示贤小二AI标注训练系统的使用&#xff0c;以及标注数据时注意事项和技巧&#xff1b; 2、本程序采用c# Net8.0框架开发&#xff0c;是贤小二开发的一款Yolo标注…

二分类交叉熵损失

二分类交叉熵损失&#xff08;Binary Cross-Entropy Loss&#xff09;是用于二分类问题的常见损失函数。它衡量的是模型输出的预测概率分布与真实标签之间的差异。 1 二分类问题 在二分类问题中&#xff0c;每个样本的目标输出是 0 或 1&#xff0c;表示样本属于某一类或另一类…

【C++】Cplusplus进阶

模板的进阶&#xff1a; 非类型模板参数 是C模板中允许使用具体值&#xff08;而非类型&#xff09;作为模板参数的特性。它们必须是编译时常量&#xff0c;且类型仅限于整型、枚举、指针、引用。&#xff08;char也行&#xff09; STL标准库里面也使用了非类型的模板参数。 …

关于pycharm远程连接服务器如何debug

1、pycharm远程连接只有pycharm专业版才可以&#xff0c;在校学生可以用学校邮箱申请。另外&#xff0c;网上电商也可以&#x1f92b; 2、远程连接有很多教程&#xff0c;可以参考的文章有很多。这里主要记录关于远程连接服务器debug遇到的一些问题。 3、由于远程连接服务器开…

数据结构每日一题day11(链表)★★★★★

题目描述&#xff1a;有一个带头结点的单链表L&#xff0c;请设计一个算法查找其第1个数据值为e的结点&#xff0c;若存在则返回指向该结点的指针&#xff0c;若不存在则返回 NULL。 算法思想&#xff1a; 输入检查&#xff1a;若链表为空&#xff08;仅有头结点&#xff09;&…

《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》

章节 6&#xff1a;日期选择器与日期处理 目标 学习如何使用DatePicker组件。理解日期格式化和日期计算。 内容 日期选择器基础 使用DatePicker组件。处理日期选择事件。 日期格式化 格式化日期为友好的文本。 日期计算 判断日期是否过期或即将到期。 代码示例 Entry Com…

迅饶科技X2Modbus网关-GetUser信息泄露漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 该漏洞的存在是由于GetUser接口在…

Go 原理剖析:数据结构之字符串

在 Go 语言中&#xff0c;字符串&#xff08;string&#xff09;是一个非常重要的数据类型。它看似简单&#xff0c;但背后却隐藏着不少有趣的原理和优化技巧。今天我们就来聊聊 Go 中字符串的底层结构、特性&#xff0c;以及如何高效地使用它。 1. 字符串的底层结构 字符串的…

【SPP】蓝牙链路控制(LC)在SPP中互操作性深度解析

在蓝牙协议栈的精密分层体系中&#xff0c;其链路控制&#xff08;Link Control, LC&#xff09;层作为基带层的核心组件&#xff0c;承载着物理信道管理、连接建立与维护等关键任务。其互操作性要求直接决定了不同厂商设备能否实现无缝通信。本文将以蓝牙技术规范中的LC互操作…

Windows C++ 排查死锁

开发出来应用程序突然间卡死不动&#xff0c;如果其中是因为死锁问题卡列该如何排查 下面是一个简单的死锁例子 #include <iostream> #include <thread> #include <mutex>std::mutex a, b;void function_a() {std::lock_guard<std::mutex> _x(a);std:…

【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

【易订货-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…