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.rhkb.cn/news/253597.html

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

相关文章

如何用python进行数据分析?

前言 很多人可能会有这样的疑问&#xff0c;数据分析Excel挺强大的&#xff0c;会Excel就行&#xff0c;为什么还要去学python&#xff1f; 是的&#xff0c;Excel和python对于数据分析而言&#xff0c;这两者都只是不同的工具而已。 但&#xff0c;有一点我们要考虑&#x…

iOS 需求 多语言(国际化)App开发 源码

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

路由器、路由器的构成、交换结构

目录 1 路由器 1.1 路由器的结构 “转发”和“路由选择”的区别 1.1.1 输入端口对线路上收到的分组的处理 1.1.2 输出端口将交换结构传送来的分组发送到线路 2.2 交换结构 2.2.1 通过存储器 2.2.2 通过总线 2.2.3 通过纵横交换结构 (crossbar switch fabric) 1 路由器…

BUGKU-WEB 留言板

题目描述 题目无需登录后台&#xff01;需要xss平台接收flag&#xff0c; http协议需要http协议的xss平台打开场景后界面如下&#xff1a; 解题思路 看到此类的题目&#xff0c;应该和存储型xss有关&#xff0c;也就是将恶意代码保存到服务器端即然在服务器端&#xff0c;那就…

CSS 闪电按钮效果

<template><view class="const"><div class="voltage-button"><button>闪电按钮</button><svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox=&q…

简易计算器的制作(函数指针数组的实践)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a; 我要学编程(ಥ_ಥ)-CSDN博客 前期思路&#xff08;菜单的制作等&#xff09;&#xff1a;利用C语言的分支循环少量的函数知识写一个猜数字的小游戏-CSDN博客 计算器的制作其实与游…

使用ChatGpt和文心一言辅助文章创作

近期在写数字水浒系列文章&#xff0c;使用了ChatGpt和文心一言进行辅助创作&#xff0c;整体感受不错&#xff0c;提高了工作效率。 在使用过程中&#xff0c;感觉文心的中文能力更强一些&#xff0c;主要体现在&#xff1a; 1 语料库更大&#xff0c;比如对水浒传了解的更多…

Postman(接口测试工具),什么是Postman接口

目录 一.基本介绍 Postman 是什么Postman 快速入门快速入门需求说明 二.Postman 完成 Controller 层测试 需要的代码&#xff1a; Java类request.jspsuccess.jsp1. 完成请求2. 完成请求3. 完成请求4. 完成请求5. 完成请求 三.发送join 目录 一.基本介绍 Postman 是什么 …

微信小程序解决华为手机保存图片到相册失败

1.新增隐私设置 2.优化代码 新增uni.authorize判断 _saveCode() {let that this;console.log(点击了保存图片)console.log(this.result)uni.authorize({scope: scope.writePhotosAlbum,success(e) {console.log(e)if (this.result ! "") {uni.saveImageToPhotosAlb…

一步步建立一个C#项目(连续读取S7-1200PLC数据)

这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。 1、窗体应用 2、配置存储位置 3、选择框架 拖拽一个Button,可以选择视图菜单---工具箱 4、工具箱 拖拽Lable控件和TextBook控件 5、拖拽控件 接下来…

C# 实现微信自定义分享

目录 需求与调整 代码实现 获取令牌 生成合法票据 获取有效签名 客户端准备 客户端实现 小结 需求与调整 在微信中打开网页应用后&#xff0c;可以选择将地址发送给朋友进行分享&#xff0c;如下图&#xff1a; 在实际的应用中&#xff0c;我们可能不是简单的将该网页…

进程控制(Linux)

进程控制 一、进程创建1. 再识fork2. 写时拷贝 二、进程终止前言——查看进程退出码1. 退出情况正常运行&#xff0c;结果不正确异常退出 2. 退出码strerror和errno系统中设置的错误码信息perror异常信息 3. 退出方法exit和_exit 三、进程等待1. 解决等待的三个问题2. 系统调用…

Unity_ShaderGraph节点问题

Unity_ShaderGraph节点问题 Unity版本&#xff1a;Unity2023.1.19 为什么在Unity2023.1.19的Shader Graph中找不见PBR Master节点&#xff1f; 以下这个PBR Maste从何而来&#xff1f;

项目02《游戏-09-开发》Unity3D

基于 项目02《游戏-08-开发》Unity3D &#xff0c; 本次任务是做抽卡界面&#xff0c;获取的卡片增添在背包中&#xff0c;并在背包中可以删除卡片&#xff0c; 首先在Canvas下创建一个空物体&#xff0c;命名为LotteryPanel&#xff0c;作为抽卡界面&#xff0c; …

Redis的数据类型Hash使用场景实战

Redis的数据类型Hash使用场景 常见面试题&#xff1a;redis在你们项目中是怎么用的&#xff0c;除了String数据类型还使用什么数据类型&#xff1f; 怎么保证缓存和数据一致性等问题… Hash模型使用场景 知识回顾&#xff1a; redisTemplate.opsForHash() 方法是 Redis 的 …

【Nginx】nginx入门

文章目录 一、Web服务器二、Nginx三、Nginx的作用Web服务器正向代理反向代理 四、CentOS上安装Nginx(以CentOS 7.9为例) 一、Web服务器 Web 服务器&#xff0c;一般是指“网站服务器”&#xff0c;是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户…

Centos 7.5 安装 NVM 详细步骤

NVM&#xff08;Node Version Manager&#xff09;是一个用于管理Node.js版本的工具&#xff0c;它可以让你轻松地在多个版本之间切换。NVM 通过下载和管理 Node.js 的多个版本&#xff0c;为用户提供了一种灵活的方式来使用不同版本的 Node.js。如果你需要更多关于NVM的信息&a…

C语言操作符详解

操作符的分类 • 算数操作符 &#xff1a; 、 - 、 * 、 / 、 % • 移位操作符 &#xff1a; << 、 >> • 位操作符 &#xff1a; & 、 | 、 ^ • 赋值操作符 &#xff1a; 、 、 - 、 * 、 / 、 % 、 << 、 >> 、 & 、 |…

阅读《极客时间 | Kafka核心技术与实战》(一)【Kafka入门】

阅读《极客时间 | Kafka核心技术与实战》 为什么要学习Kafka消息引擎系统ABC一篇文章带你快速搞定Kafka术语我应该选择哪种Kafka&#xff1f;聊聊Kafka的版本号 为什么要学习Kafka 如果你是一名软件开发工程师的话&#xff0c;掌握 Kafka 的第一步就是要根据你掌握的编程语言去…

移动光猫gs3101超级密码及改桥接模式教程

文章目录 超级管理员账号改桥接模式路由器连接光猫&#xff0c;PPPOE拨号即可&#xff01;附录&#xff1a;如果需要改桥接的话不知道拨号密码咋办打开光猫Telnet功能Telnet 登录 参考文章 移动光猫吉比特GS3101超级账号获取更改桥接 移动光猫gs3101超级密码及改桥接模式教程 …