Logback - 日志框架

引言
在当今的企业级应用开发中,日志管理是一个不可或缺的部分。它不仅帮助我们进行错误跟踪,还能有效监控应用程序的运行状态,为性能优化提供数据支撑。Spring Boot作为一个简化Spring应用开发的框架,自带了强大的日志管理功能。在Spring Boot的众多日志管理技术中,Logback由于其高效性能和灵活配置而广受欢迎。

Logback简介

Logback是由log4j创始人Ceki Gülcü领导开发的日志组件,它是SLF4J的一个实现,也是log4j的一个强大替代品。Logback被设计用来更快的速度,更小的内存占用以及更多的灵活配置进行日志记录。
其中包括三个模块:

  • logback-core:核心模块,提供了关键的通用机制;
  • logback-classic:可以看作是 log4j 的改进版,实现了简单的日志门面 SLF4J;
  • logback-access:主要用来和 Servlet 容器交互,比如说 Tomcat,提供了一些 HTTP 访问的功能

spring-boot-starter-* =>spring-boot-starter =>spring-boot-starter-logging
spring-boot-starter-logging 启动器依赖,默认集成的是 logback 日志,可以在项目的 application.yml 中添加日志相关配置,也可以直接指定日志配置文件进行配置。
Commons Logging => SLF4J/Log4j => Log4j2 => Logback

Spring Boot与Logback的整合

非 springboot 项目

导入依赖

<!-- slf4j日志门面的一个具体实现 -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
</dependency>

springboot 项目

任何一个 spring-boot-starter-* 都会默认导入一个 spring-boot-starter-logging 启动器依赖,因此只要当前项目的依赖中有starter,无需显式引入。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId>
</dependency>

Spring Boot默认支持Logback,并已经带有一系列的自动配置。当我们在classpath下添加了logback-spring.xmllogback.xml配置文件时,Spring Boot会使用Logback作为默认的日志框架。

日志级别

  • TRACE - 这是最详细的日志级别,用于跟踪程序执行的每一个步骤,适合进行调试。
  • DEBUG - 提供较细粒度的信息,有助于开发者诊断问题。
  • INFO - 用于记录程序的主要运行状态和信息,如启动和关闭。
  • WARN - 表示可能出现潜在问题的警告信息。
  • ERROR - 记录严重的错误信息,可能会导致程序退出。
// 使用slf4j门面,若不特殊指定,以下的示例都是这一段代码
@SpringBootTest
public class LogBackTest {private final static Logger logger = LoggerFactory.getLogger(LogBackTest.class);@Testpublic void test() {logger.trace("=============奇遇少年");logger.debug("=============奇遇少年");logger.info("=============奇遇少年");logger.warn("=============奇遇少年");logger.error("=============奇遇少年");}
}

生成日志文件

编写测试类

@SpringBootTest
public class LogBackTest {private final static Logger logger = LoggerFactory.getLogger(LogBackTest.class);@Testpublic void test() {for (int i = 0; i < 100000000; i++) {logger.trace("=============奇遇少年");logger.debug("=============奇遇少年");logger.info("=============奇遇少年");logger.warn("=============奇遇少年");logger.error("=============奇遇少年");}}
}

方式一、application.yml中配置

# 输出到控制台的配置
log:path: /tmp/log
logging:pattern:# 输出格式配置console: ' %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n'logback:rollingpolicy:file-name-pattern: ${log.path}/奇遇少年-%d{yyyy-MM-dd}.%i.gzmax-file-size: 10MBmax-history: 6file:name: ${log.path}/yu.log

大于10MB 日志文件会进行压缩
在这里插入图片描述
方式二:logback-spring.xml

spring:profiles:active: pro #开发或正式环境
<configuration><!--    %d:输出时间,格式为指定格式。%-5level:输出日志级别,左对齐,占5个字符的宽度。%thread:输出线程名称。%c{36}:输出日志类路径,最长不超过36个字符。%M:日志对应的方法名%L:对应代码行号%msg:输出日志消息。%n:输出平台相关的行分隔符。--><!--    开发环境格式--><property name="dev_pattern"value="%d{yyyy-MM-dd HH:mm:ss} | [%-5level] [%thread] %c{36} %M %L -- %msg %n"></property><!--    正式环境--><property name="pro_pattern"value="%d{yyyy-MM-dd HH:mm:ss} | [%-5level] [%thread] %c{36} %M %L -> %msg %n"></property><property name="log_dir" value="/tmp/log"></property><!--控制台打印日志--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><springProfile name="dev"><pattern>${dev_pattern}</pattern></springProfile><springProfile name="pro"><pattern>${pro_pattern}</pattern></springProfile></encoder><target>System.err</target></appender><!-- 按时间和大小进行日志滚动 --><appender name="roll_file" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log_dir}/yu.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log_dir}/奇遇少年-%d{yyyy-MM-dd}.%i.gz</fileNamePattern><!--文件最多保存的时间--><maxHistory>30</maxHistory><!--文件超过这个大小则生成新的压缩文件--><maxFileSize>10MB</maxFileSize></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><springProfile name="dev"><pattern>${dev_pattern}</pattern></springProfile><springProfile name="pro"><pattern>${pro_pattern}</pattern></springProfile></encoder></appender><root level="all"><appender-ref ref="console"/><appender-ref ref="roll_file"/></root>
</configuration>

在这里插入图片描述

自定义配置文件名

自定义配置文件名,则需要在application.yml中申明:

logging:config: classpath:yu.xml #自定义的配置文件名

在这里插入图片描述

结语

Logback作为一个现代的日志框架,为Spring Boot应用提供了极致的性能和极度的灵活性。通过合理配置Logback,我们可以很好地控制日志输出,并以此帮助我们更好地理解和监控应用运行时的状态和行为。然而,任何强大的工具都需要谨慎使用,过多的日志记录会影响应用性能,不足的记录又可能导致问题难以追踪。成熟的开发人员会根据应用的具体情况,做出合理的日志管理方案。


希望本文能够为你在Spring Boot应用中使用Logback提供一些有价值的参考。

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

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

相关文章

算法练习-三数之和(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;数组 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨在…

类型化数组

数字存储前置知识 计算机必须使用固定的位数来存储数字&#xff0c;无论存储的数字是大是小&#xff0c;在内存中占用的空间是固定的n位的无符号整数能表示的个数是2^n个 取值范围是0~2^n-1 举例&#xff1a;000 001 111 表示[0-8]n位的有符号整数能表示的个数是2^n个 取值范围…

【动态规划】【子数组划分】【前缀和】1977. 划分数字的方案数

作者推荐 【动态规划】【状态压缩】【2次选择】【广度搜索】1494. 并行课程 II 本文涉及知识点 动态规划汇总 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode1977 划分数字的方案数 你写下了若干 正整数 &#xff0c;并将它们…

前端vite+vue3——自动化配置路由布局

文章目录 ⭐前言&#x1f496;vue3系列文章 ⭐ 自动化配置路由&#x1f496;引入vite版本自定义目录映射&#x1f496;自动化读取文件下的路由&#x1f496;main入口加载路由&#x1f496;入口app.vue配置&#x1f496;layout基础布局配置&#x1f496;效果 ⭐总结⭐结束 ⭐前言…

解锁售前新效能:AI助手使用的三点建议

1.售前工作概述 自从阴差阳错从技术实施转做售前到现在也有10多年时间&#xff0c;与技术实施仅负责设备安装调试、用户使用培训以及售后维护等被动工作不同。售前更多的是针对用户的主动性工作&#xff0c;包括需求调研与分析、技术沟通与咨询、方案设计与制定、方案演示与讲…

PdfFactory Pro软件下载以及序列号注册码生成器

PdfFactory Pro注册机是一款针对同名虚拟打印机软件所推出的用户名和序列号生成器。PdfFactory Pro是一款非常专业的PDF虚拟打印软件&#xff0c;通过使用这款注册机&#xff0c;就能帮助用户免费获取注册码&#xff0c;一键激活&#xff0c;永久免费使用。 pdffactory7注册码如…

数据库管理-第146期 最强Oracle监控EMCC深入使用-03(20240206)

数据库管理145期 2024-02-06 数据库管理-第146期 最强Oracle监控EMCC深入使用-03&#xff08;20240206&#xff09;1 概览2 性能中心3 性能中心-Exadata总结 数据库管理-第146期 最强Oracle监控EMCC深入使用-03&#xff08;20240206&#xff09; 作者&#xff1a;胖头鱼的鱼缸&…

RabiitMQ延迟队列(死信交换机)

Dead Letter Exchange&#xff08;死信交换机&#xff09; 在MQ中&#xff0c;当消息成为死信&#xff08;Dead message 死掉的信息&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而 在RabbitMQ中&#xff0c;由…

IS-IS weight影响路由加表

拓扑图 配置 nexthop weight影响路由加入路由表 weight默认为255&#xff0c;取值1~255&#xff0c;值越小越优先 sysname R1 # isis 1is-level level-1cost-style widenetwork-entity 49.1234.0000.0000.0001.00log-peer-change topology # interface GigabitEthernet0/0/0…

003集——通过VBA将二进制文件转为文本文件

对于二进制的文件&#xff0c;我们可以通过vba代码转为文本文件。这里以dxf为例&#xff0c; 代码如下&#xff1a; Sub ConvertBinaryToText()Dim fs As Object FileSystemObjectSet fs CreateObject("Scripting.FileSystemObject")Dim binaryFilePath As Strin…

Java算法练习5

Java算法练习5 1.8 [268. 丢失的数字](https://leetcode.cn/problems/missing-number/)1.9 [383. 赎金信](https://leetcode.cn/problems/ransom-note/)1.10 [2133. 检查是否每一行每一列都包含全部整数](https://leetcode.cn/problems/check-if-every-row-and-column-contains…

STM32Cubmax stm32f103zet6 SPI通讯

一、基本概念 SPI 是英语 Serial Peripheral interface 的缩写&#xff0c;顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM&#xff0c; FLASH&#xff0c;实时时 钟&#xff0c; AD 转换器&#xff0c;还有数…