Spring Boot - 日志功能深度解析与实践指南

文章目录

  • 概述
  • 1. Spring Boot 日志功能概述
  • 2. 默认日志框架:Logback
    • Logback 的核心组件
    • Logback 的配置文件
  • 3. 日志级别及其配置
    • 配置日志级别
      • 3.1 配置文件
      • 3.2 环境变量
      • 3.3 命令行参数
  • 4. 日志格式自定义
    • 自定义日志格式
  • 5. 日志文件输出
  • 6. 日志归档与清理
  • 7. 自定义日志配置
  • 8. 与其他日志框架的集成
    • 8.1 使用 Log4j2
    • 8.2 使用 Java Util Logging
  • 9. 日志性能优化
  • 11. 总结

在这里插入图片描述


概述

Spring Boot 作为 Java 生态中最流行的应用开发框架之一,提供了强大且灵活的日志功能,支持多种日志框架,并且可以轻松配置。接下来我们将基于 Spring Boot 官方文档,深入解析 Spring Boot 的日志功能,并结合实际场景提供详细的配置与实践指南。


1. Spring Boot 日志功能概述

Spring Boot 的日志功能旨在为开发者提供开箱即用的日志解决方案,同时支持高度自定义。其核心特点包括:

  • 默认集成 Logback:Spring Boot 默认使用 Logback 作为日志框架,无需额外配置。
  • 多日志框架支持:除了 Logback,还支持 Log4j2 和 Java Util Logging(JUL)。
  • 灵活的配置:通过配置文件、环境变量或命令行参数轻松调整日志行为。
  • 丰富的功能:支持日志级别控制、日志格式自定义、文件输出、日志归档等。

Spring Boot 的日志功能通过 spring-boot-starter-logging 依赖实现,该依赖会自动引入 Logback 及其相关依赖。


2. 默认日志框架:Logback

Logback 是 Log4j 的继任者,由 Log4j 的原作者开发。它具有更高的性能、更丰富的功能以及更好的扩展性。Spring Boot 默认使用 Logback 作为日志框架,开发者无需额外配置即可使用。

Logback 的核心组件

  • Logger:负责日志记录,开发者通过 Logger 对象输出日志。
  • Appender:定义日志的输出目的地,例如控制台、文件、数据库等。
  • Layout:定义日志的输出格式。

Logback 的配置文件

Logback 支持通过 XML 或 Groovy 文件进行配置。Spring Boot 默认会在 classpath 下查找 logback-spring.xml 文件作为配置文件。如果未找到,则使用内置的默认配置。


3. 日志级别及其配置

日志级别用于控制日志信息的详细程度。Spring Boot 支持以下日志级别(从低到高):

  • TRACE:最详细的日志信息,通常用于调试。
  • DEBUG:用于调试的日志信息。
  • INFO:常规的运行日志信息。
  • WARN:警告信息,表示潜在的问题。
  • ERROR:错误信息,表示发生了错误但应用程序仍可运行。
  • FATAL:严重错误信息,表示应用程序无法继续运行。

配置日志级别

可以通过以下方式配置日志级别:

3.1 配置文件

application.propertiesapplication.yml 中设置日志级别。例如:

logging.level.root=WARN
logging.level.org.springframework=DEBUG
logging.level.com.example=TRACE

3.2 环境变量

通过设置环境变量来调整日志级别。例如:

export LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=DEBUG

3.3 命令行参数

在启动应用时通过命令行参数设置日志级别。例如:

java -jar myapp.jar --logging.level.org.springframework=DEBUG

4. 日志格式自定义

Spring Boot 允许开发者自定义日志输出格式。默认的日志格式如下:

2023-10-01 12:34:56.789  INFO 12345 --- [           main] com.example.MyClass : This is a log message

自定义日志格式

开发者可以通过 application.propertiesapplication.yml 文件自定义日志格式。例如:

logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n

常用的日志格式占位符包括:

  • %d:日期和时间。
  • %msg:日志消息。
  • %n:换行符。
  • %level:日志级别。
  • %logger:Logger 名称。

5. 日志文件输出

除了控制台输出,Spring Boot 还支持将日志输出到文件。开发者可以通过以下配置启用文件日志记录:

logging.file.name=myapp.log
logging.file.path=/var/logs
  • logging.file.name:指定日志文件的名称。
  • logging.file.path:指定日志文件的存储路径。

如果同时指定了 logging.file.namelogging.file.path,则 logging.file.name 优先级更高。


6. 日志归档与清理

为了避免日志文件过大,Spring Boot 支持日志文件的归档和清理。开发者可以通过以下配置实现:

logging.logback.rollingpolicy.max-file-size=10MB
logging.logback.rollingpolicy.max-history=30
  • max-file-size:指定单个日志文件的最大大小,超过该大小后会自动归档。
  • max-history:指定保留的归档日志文件的最大天数。

7. 自定义日志配置

如果默认的日志配置无法满足需求,开发者可以完全自定义日志配置。Spring Boot 支持通过 XML 或 Groovy 文件配置日志框架。例如,可以在 src/main/resources 目录下创建 logback-spring.xml 文件来配置 Logback。

<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="STDOUT" /></root>
</configuration>

8. 与其他日志框架的集成

除了 Logback,Spring Boot 还支持 Log4j2 和 Java Util Logging(JUL)。可以通过以下方式切换日志框架:

8.1 使用 Log4j2

pom.xml 中排除 spring-boot-starter-logging,并引入 spring-boot-starter-log4j2

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

8.2 使用 Java Util Logging

application.properties 中配置:

logging.framework=jul

9. 日志性能优化

在高并发场景下,日志记录可能会成为性能瓶颈。以下是一些优化建议:

  • 异步日志:使用异步 Appender 提高日志记录性能。
  • 减少不必要的日志:避免在高频代码路径中记录 DEBUGTRACE 级别的日志。
  • 使用高效的日志格式:避免复杂的日志格式占位符。

11. 总结

  • 合理配置日志级别:根据环境(开发、测试、生产)调整日志级别。
  • 使用自定义日志配置:在复杂场景下,使用 XML 或 Groovy 文件进行配置。
  • 优化日志性能:在高并发场景下,使用异步日志和高效的日志格式。
  • 集中管理日志:在微服务架构中,使用集中式日志管理工具。

参考文档
Spring Boot 官方文档 - 日志功能

在这里插入图片描述

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

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

相关文章

USB子系统学习(一)USB电气信号

文章目录 1、声明2、USB协议概述3、USB电气信号3.1、USB基础概念3.1.1、低速/全速信号电平3.1.2、高速信号电平 3.2、学习目标3.3、设备断开与连接3.3.1、连接3.3.2、断开 3.4、复位3.5、设备速率识别3.5.1、低速/全速3.5.2、高速 3.6、数据信号3.6.1、低速/全速的SOP和EOP3.6.…

Android GameActivity(NativeActivity)读写文件

最近研究native android相关内容&#xff0c;其中最棘手的就是文件读写问题&#xff0c;最主要的是相关的文档很少。这里写下我所知道的方法。 由于本人使用的是Android14[arm64-v8a]版本的设备,能访问的路径相当有限&#xff0c;如果想要访问更多的路径&#xff0c;就不得不申…

安卓入门十一 常用网络协议四

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; MQTT是一种轻量级的、发布/订阅模式的消息传输协议。它被设计用于在低带宽或不稳定网络环境下&#xff0c;实现物联网设备之间的可靠通信。 4.1 MQTT详细介绍 发布/订阅模式&#xff1a;MQTT 使用发布/订…

气膜球幕:引领元宇宙时代的科技与艺术光影盛宴—轻空间

在科技与艺术交织的时代&#xff0c;未来的观影体验将不再受限于传统屏幕的束缚。随着气膜球幕的崭新亮相&#xff0c;突破性的光影效果和沉浸式体验让我们走进了一个全新的视听世界。这不仅仅是一个简单的球形影院&#xff0c;它是连接现实与虚拟、科技与艺术、光与影的桥梁&a…

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统&#xff1f; A hy…

kernel32.dll动态链接库报错要怎解决?详细解析kernel32.dll文件缺失解决方案

Kernel32.dll动态链接库报错详解与解决方案 在电脑的日常使用中&#xff0c;我们时常会遇到各种系统报错&#xff0c;其中kernel32.dll文件的报错尤为让人头疼。作为一名在软件开发领域摸爬滚打多年的从业者&#xff0c;我将为大家深入解析kernel32.dll文件的重要性&#xff0…

win10 npm login 登陆失败

npm login 命令总是登陆失败 提示我们设置带proxy。我们本地找到这个 找到代理地址 进行关键信息的设置 npm config set proxy http://xxxx:xxxx npm config set https-proxy http://xxx:xxx 设置完之后在执行npm login即可

[Qt] 输入控件 | Line | Text | Combo | Spin | Date | Dial | Slider

目录 输入类控件 1、Line Edit 录入个人信息 使用正则表达式验证输入框的数据 验证两次输入的密码一致 切换显示密码 2、Text Edit 获取多行输入框的内容 验证输入框的各种信号 3、Combo Box 使用下拉框模拟麦当劳点餐 从文件中加载下拉框的选项 4、Spin Box 调整…

SpringCloud源码-Ribbon

一、Spring定制化RestTemplate&#xff0c;预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…

基于单片机的数字电子秒表设计

此文章谨为课设记录 一、实验要求 题目六 数字电子时钟 基本要求&#xff1a; (1) 设计一个单片机电子时钟&#xff0c;设计的电子时钟通过数码管显示&#xff1b; (2) 具有能通过按键实现设置时间的功能&#xff1b; (3) 显示格式为小时十位、小时个位&#xff0c;分…

【业务场景】sql server从Windows迁移到Linux

目录 1.背景 2.Linux安装sql server 3.服务器不开端口的问题 4.数据库导入导出问题 1.背景 博主在24年年底接手运维了一个政府的老系统&#xff0c;整个应用和数据库单点部署在一台Windows Server服务器上&#xff0c;数据库选型是经典的老项目标配——sql server。随着近…

Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案

Flink CDC 自定义函数处理 SQLServer XML类型数据方案 1. 背景 因业务使用SQLServer数据库&#xff0c;CDC同步到doris 数仓。对于SQLServer xml类型&#xff0c;doris没有相应的字段对应&#xff0c; 可以使用json来存储xml数据。需要进行一步转换。从 flink 自定义函数入手…

Jdk动态代理源码缓存优化比较(JDK17比JDK8)

目录 JDK 8的缓存实现 JDK 17的缓存实现 优化比较 总结实际应用影响 JDK 8的缓存实现 // JDK 8 private static final WeakCache<ClassLoader, Class<?>[], Class<?>> proxyClassCache new WeakCache<>(new KeyFactory(), new ProxyClassFact…

《learn_the_architecture_-_aarch64_exception_model》学习笔记

1.当发生异常时&#xff0c;异常级别可以增加或保持不变&#xff0c;永远无法通过异常来转移到较低的权限级别。从异常返回时&#xff0c;异常级别可能会降低或保持不变&#xff0c;永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理&#xff0c;异常必须在比…

声音是如何产生的

一、音频概述 RTMP中一般音频采用aac编码&#xff0c;采样率为44100HZ, 每帧1024采样&#xff0c;帧率43&#xff0c;23.2ms一帧 RTC中一般音频采用opus编码&#xff0c;采样率为48000HZ&#xff0c;每帧480采样&#xff0c;帧率100&#xff0c;10ms一帧 通道数&#xff08;c…

Docker新手:在tencent云上实现Python服务打包到容器

1 使用docker的原因 一致性和可移植性&#xff1a;Docker 容器可以在任何支持 Docker 的环境中运行&#xff0c;无论是开发者的笔记本电脑、测试服务器还是生产环境。这确保了应用在不同环境中的行为一致&#xff0c;减少了“在我的机器上可以运行”的问题。 隔离性&#xff…

Science Robotics让软机器人“活”得更久的3D打印!

软机器人硬件在医疗、探索无结构环境等领域有广泛应用&#xff0c;但其生命周期有限&#xff0c;导致资源浪费和可持续性差。软机器人结合软硬组件&#xff0c;复杂组装和拆卸流程使其难以维修和升级。因此&#xff0c;如何延长软机器人的生命周期并提高其可持续性成为亟待解决…

conan从sourceforge.net下载软件失败

从sourceforge.net下载软件&#xff0c;经常会没有开始下载就返回了。 原因是&#xff1a; 自动选择的镜像站不能打开。 在浏览器中&#xff0c;我们可以手动选择站点尝试&#xff0c;但是conan就不行了。 手动选择一个站点&#xff0c;能够有文件保存窗口弹出&#xff0c;之后…

数势科技:解锁数据分析 Agent 的智能密码(14/30)

一、数势科技引领数据分析变革 在当今数字化浪潮中&#xff0c;数据已然成为企业的核心资产&#xff0c;而数据分析则是挖掘这一资产价值的关键钥匙。数势科技&#xff0c;作为数据智能领域的领军者&#xff0c;以其前沿的技术与创新的产品&#xff0c;为企业开启了高效数据分析…

第J4周:ResNet与DenseNet结合探索

目录 FROM一、本周内容1. ResNet与DenseNet的基本原理2. ResNet与DenseNet结合模块图 二、核心代码及运行截图 FROM &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境 语言环境&#xff1a;Python 3…