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

深入理解Spring Boot日志框架与配置

目录

  1. Spring Boot日志框架概述
  2. Spring Boot默认日志框架:Logback
  3. 日志配置文件
  4. 日志级别的调整
  5. 日志输出配置
  6. 日志格式化
  7. 日志轮转和归档
  8. 集成其他日志框架
  9. 日志管理工具
  10. 最佳实践
  11. 总结

Spring Boot日志框架概述

Spring Boot 支持多种日志框架,如 Logback、Log4j2 和 Java Util Logging (JUL)。其中,Logback 是 Spring Boot 默认使用的日志框架。Spring Boot 通过 spring-boot-starter-logging 依赖提供对这些日志框架的支持,并自动配置默认的日志设置。

常见的日志框架有:

  • Logback
  • Log4j2
  • Java Util Logging (JUL)
  • SLF4J (Simple Logging Facade for Java)

统一日志接口:SLF4J

SLF4J 是一个简单的日志门面,它为各种日志框架提供了统一的接口。开发者可以在代码中使用 SLF4J API,而在运行时选择具体的日志框架实现。Spring Boot 默认集成了 SLF4J,并使用 Logback 作为实际的日志实现。

Spring Boot默认日志框架:Logback

Logback 是由 Log4j 的作者开发的一个开源日志框架,具有性能高、灵活性强、易于配置等特点。Spring Boot 默认集成了 Logback,并提供了一些默认的配置。

默认配置

Spring Boot 的默认日志配置非常简单且易于理解。默认情况下,日志会输出到控制台,并使用以下格式:

%date{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

示例输出:

2024-08-09 12:34:56 [main] INFO  com.example.demo.Application - Starting Application on localhost with PID 1234

日志配置文件

Spring Boot 支持多种格式的日志配置文件,包括 application.propertiesapplication.yml 和原生的 Logback 配置文件 logback-spring.xmllogback.xml

使用application.properties进行配置

application.properties 文件中,可以通过 logging 前缀来配置日志设置。例如:

# 设置日志级别
logging.level.root=INFO
logging.level.com.example=DEBUG# 配置日志文件
logging.file.name=logs/myapp.log# 配置日志文件大小和归档策略
logging.file.max-size=10MB
logging.file.max-history=30

使用logback-spring.xml进行配置

对于复杂的日志配置,可以使用 logback-spring.xmllogback.xml 文件。以下是一个简单的 logback-spring.xml 示例:

<configuration><property name="LOG_PATH" value="logs"/><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/myapp.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/myapp.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="FILE" /></root>
</configuration>

日志级别的调整

日志级别决定了日志记录的详细程度。常见的日志级别有:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL(Log4j2 特有)

日志级别是有层次的,从 TRACEERROR,记录的信息越来越少。可以在 application.propertieslogback-spring.xml 文件中配置不同包或类的日志级别。

在application.properties中配置日志级别

# 设置根日志级别
logging.level.root=INFO# 设置特定包的日志级别
logging.level.com.example=DEBUG
logging.level.org.springframework.web=ERROR

在logback-spring.xml中配置日志级别

<logger name="com.example" level="DEBUG"/>
<logger name="org.springframework.web" level="ERROR"/>

日志输出配置

Spring Boot 允许将日志输出到不同的目标,如控制台、文件、数据库等。可以在 application.propertieslogback-spring.xml 文件中进行配置。

输出到控制台

默认情况下,Spring Boot 会将日志输出到控制台。如果需要自定义控制台输出格式,可以在 logback-spring.xml 中配置 ConsoleAppender

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender><root level="INFO"><appender-ref ref="STDOUT" />
</root>

输出到文件

将日志输出到文件,可以在 application.properties 中配置:

# 配置日志文件路径
logging.file.name=logs/myapp.log# 配置日志文件大小和归档策略
logging.file.max-size=10MB
logging.file.max-history=30

或者在 logback-spring.xml 中配置 RollingFileAppender

<property name="LOG_PATH" value="logs"/><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/myapp.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/myapp.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender><root level="INFO"><appender-ref ref="FILE" />
</root>

输出到数据库

将日志输出到数据库,可以在 logback-spring.xml 中配置 DBAppender。以下是一个将日志输出到MySQL数据库的示例:

<appender name="DB" class="ch.qos.logback.core.db.DBAppender"><connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource"><driverClass>com.mysql.cj.jdbc.Driver</driverClass><url>jdbc:mysql://localhost:3306/logdb</url><user>username</user><password>password</password></connectionSource><sql><![CDATA[INSERT INTO log_entries (timestamp, level, logger, message)VALUES (CURRENT_TIMESTAMP, %level, %logger, %message)]]></sql>
</appender><root level="INFO"><appender-ref ref="DB" />
</root>

日志格式化

日志格式化指的是日志输出的格式,可以通过配置来定义日志的显示样式。Spring Boot 使用Logback的PatternLayout来格式化日志。

在application.properties中配置日志格式

# 配置控制台日志格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n# 配置文件日志格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

在logback-spring.xml中配置日志格式

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/myapp.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/myapp.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>

日志轮转和归档

日志轮转和归档是指将日志文件按一定规则进行分割和存档,以防止日志文件过大。Logback 提供了灵活的日志轮转和归档策略。

时间轮转策略

时间轮转策略可以按时间段(如每天、每小时)分割日志文件。在 logback-spring.xml 中配置 TimeBasedRollingPolicy

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/myapp.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/myapp.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>

大小轮转策略

大小轮转策略可以按文件大小分割日志文件。在 logback-spring.xml 中配置 SizeBasedTriggeringPolicy

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/myapp.log</file><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>${LOG_PATH}/myapp.%i.log</fileNamePattern><minIndex>1</minIndex><maxIndex>10</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>10MB</maxFileSize></triggeringPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>

集成其他日志框架

虽然 Spring Boot 默认使用 Logback,但它也支持其他日志框架,如 Log4j2 和 Java Util Logging (JUL)。可以通过替换 spring-boot-starter-logging 依赖来集成其他日志框架。

集成Log4j2

pom.xml 中添加 Log4j2 依赖,并排除 spring-boot-starter-logging 依赖:

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

然后在 src/main/resources 目录下创建 log4j2-spring.xml 文件进行配置。

日志管理工具

在实际项目中,使用日志管理工具可以更方便地管理和分析日志数据。以下是一些常见的日志管理工具:

ELK Stack

ELK Stack 是由 Elasticsearch、Logstash 和 Kibana 组成的日志管理工具,可以用于集中化日志管理和分析。

  • Elasticsearch:分布式搜索引擎,用于存储和搜索日志数据。
  • Logstash:数据处理管道工具,用于收集、处理和转发日志数据。
  • Kibana:数据可视化工具,用于可视化日志数据和创建仪表板。

Graylog

Graylog 是一个开源的日志管理平台,提供强大的日志收集、处理、存储和分析功能。

Splunk

Splunk 是一个企业级的日志管理和分析工具,提供丰富的功能和强大的数据处理能力。

最佳实践

使用统一的日志接口

使用 SLF4J 作为统一的日志接口,可以在不同的日志框架之间切换,而不需要修改应用程序代码。

合理设置日志级别

根据不同的环境(开发、测试、生产)合理设置日志级别。在开发环境中,可以设置较低的日志级别(如DEBUG),以便调试;在生产环境中,设置较高的日志级别(如INFO或WARN),以减少日志量。

定期清理日志文件

定期清理旧的日志文件,防止日志文件占用过多的磁盘空间。可以通过日志轮转和归档策略自动管理日志文件。

使用日志管理工具

使用日志管理工具集中化管理和分析日志数据,及时发现和解决问题。

总结

日志是应用程序的重要组成部分,通过合理的日志配置和管理,可以提高应用程序的可维护性和可靠性。Spring Boot 提供了丰富的日志框架支持和简化的配置方式,使得日志集成和配置变得非常简单。

本文详细介绍了Spring Boot中的日志框架与配置,包括常用的日志框架、日志配置文件的格式、日志级别的调整、日志输出配置、日志格式化、日志轮转和归档、集成其他日志框架以及日志管理工具。希望通过本文的介绍,读者能够深入理解Spring Boot的日志机制,并在实际项目中灵活应用这些知识。

相关文章:

深入理解Spring Boot日志框架与配置

目录 Spring Boot日志框架概述Spring Boot默认日志框架&#xff1a;Logback日志配置文件日志级别的调整日志输出配置日志格式化日志轮转和归档集成其他日志框架日志管理工具最佳实践总结 Spring Boot日志框架概述 Spring Boot 支持多种日志框架&#xff0c;如 Logback、Log4…...

WPF——动态排名图表实现

开发环境 VS2022 .NET 8.0 MVVM Toolkit 8.2.2 需求 开发中需要实现按照成绩动态指名&#xff0c;以展示当前的竞赛成绩的一个实时情况及变化。 即如下效果&#xff1a; 需求分析 按照接收到的信息&#xff0c;就是要将获取到的集合排序&#xff0c;并且要将排序前后的变…...

reactive() 的局限性

reactive() API 有一些局限性&#xff1a; 有限的值类型&#xff1a;它只能用于对象类型 (对象、数组和如 Map、Set 这样的集合类型)。它不能持有如 string、number 或 boolean 这样的原始类型。 不能替换整个对象&#xff1a;由于 Vue 的响应式跟踪是通过属性访问实现的&…...

stm32f407vet6驱动3.2寸lcd(9341 FSMC hal)

最近在钻研一些显示屏&#xff0c;研究到了lcd显示屏&#xff0c;然后入手了一块f407的开发板,但是店家给的资料有点怪&#xff0c;是keil4的工程,我一打开显示缺少f407vexxx&#xff0c;keil现在还巨慢&#xff0c;然后我到处找资料&#xff0c;发现网上大多是vgt6,又去各家ve…...

替换后的最长重复字符(LeetCode)

题目 给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符&#xff0c;并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后&#xff0c;返回 包含相同字母的最长子字符串的长度。 解题 def characterReplacement(s, k):count {}max_len…...

[sqlserver][sql]sqlserver查询表信息和字段信息

--查询一个表中的所有字段 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAMEzsyh_AccInfo --查询一个库下的所有表 select * from sysobjects where xtypeU --查询一个数据库下的所有字段 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME in(select nam…...

easypoi模板导出word并且合并行

导出流程 引入依赖制作模板合并导出 引入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.2</version> </dependency>制作模板 合并行是备注那一列&#xff0c;这一列…...

雨云美国二区E5v2服务器测评(非广告)

注&#xff1a;本文非广告&#xff0c;非推广 本文长期更新地址&#xff1a; 雨云美国二区E5v2服务器测评&#xff08;非广告&#xff09;-星零岁的博客https://blog.0xwl.com/13594.html 今天来测评一下雨云美国二区v2服务器。我测试的这台配置是4-8&#xff0c; 35 M上传&a…...

前端form表单post请求

前端请求post&#xff0c;以表单的形式&#xff0c;后端传来的str,就是url携带的参数 const form document.createElement(form); form.style.display none; form.setAttribute(target, _blank); form.setAttribute(method, post); form.setAttribute(action,url); var vars …...

oracle共享池(shared pool):一、工作原理、组成部分 二、软硬解析过程

文章目录 oracle整体结构图共享池&#xff08;shared pool&#xff09;shared pool的作用shared pool的组成查询 shared pool 各组成部分大小硬解析和软解析 oracle整体结构图 共享池&#xff08;shared pool&#xff09; shared pool的作用 1、 将 sql 语句解析成执行计划 …...

设计模式六大原则中的里氏替换原则

设计模式六大原则中的里氏替换原则&#xff08;Liskov Substitution Principle, LSP&#xff09;是面向对象设计中一个至关重要的原则&#xff0c;它定义了继承的基本原则和约束&#xff0c;确保子类能够透明地替换父类&#xff0c;而不会破坏系统的正确性和稳定性。以下是对里…...

安装Cellpose

Cellpose是目前运用范围最广、效果最好的细胞分割模型&#xff0c;以下是安装方法。 3.1 安装cellpose 3.1.1 创建cellpose 打开Anaconda Navigator,如下图所示&#xff1a; 图3.1.1.1 Anaconda Navigator 依次点击 Environments、Create&#xff0c;在弹出的窗中&#xff0…...

图卷积神经网络算法

图神经网络 图卷积神经网络 GNN GCN 算法 咨询 图卷积神经网络&#xff08;GCN&#xff09; python D码&#xff0c;应用于节点分类。元学习&#xff0c;自监督学&#xff0c;transformer&#xff0c;lstm&#xff0c;cnn&#xff0c;bert&#xff0c;GAN&#xff0c;交通预测 …...

【C#】System.Text.Json

文章目录 主要特点使用场景基本用法序列化反序列化 自定义序列化与反序列化注意事项 System.Text.Json 是 .NET Core 3.0 及更高版本中引入的一个高性能的、低内存的 JSON 序列化与反序列化库。它是 .NET Core 和 .NET 5/6/7 等新版本中推荐的 JSON 处理方式&#xff0c;因为它…...

经典游戏,用java实现的坦克大战小游戏

今天给大家分享一个使用java编写的坦克大战小游戏&#xff0c;整体还是挺好玩的&#xff0c;通过对这款游戏的简单实现&#xff0c;加深对java基础的深刻理解。 一、设计思路 1.坦克大战小游戏通过java实现&#xff0c;其第一步需要先绘制每一关对应的地图&#xff0c;地图包括…...

linux开通端口命令

这块需要开通8088 8083 端口限制 查看已开放端口&#xff1a;sudo firewall-cmd --list-ports 开放8083端口&#xff1a;sudo firewall-cmd --add-port8088/tcp --permanent 开放8088端口&#xff1a;sudo firewall-cmd --add-port8083/tcp --permanent 移除端…...

5、并发锁机制之synchronized

并发锁机制之synchronized i/i--引起的线程安全问题分析原因分析i的JVM字节码指令i--的JVM 字节码指令结论 解决方案 synchronized的使用加锁方式使用synchronized解决之前的共享问题方式一方式二 synchronized底层实现原理分析查看synchronized的字节码指令序列重量级锁实现之…...

职场那些事:应对施暴者的智慧

在职场中&#xff0c;有些人用各种手段让你感到难受&#xff0c;让你屈服&#xff0c;甚至适应他们的变态心理。面对这种人&#xff0c;最重要的就是保持低调。&#x1f910; 很多同事选择倾诉&#xff0c;然而这其实是个大错特错。正如鲁迅所说&#xff0c;“同事间的悲欢并不…...

精细化管理和智慧化运营的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用…...

vue项目配置基础路由vue-router

1、运行以下命令安装vue-router yarn add vue-router 2、在src目录下的components中新建两个vue页面 3、在src目录下新建router文件夹&#xff0c;在router文件夹下面新建index.js文件 4、配置main.js文件 //引入Vue import Vue from "vue"; //引入App import App…...

从零开始:roLabelImg安装与OBB旋转框标注实战指南

1. 为什么需要roLabelImg和旋转框标注 在计算机视觉项目中&#xff0c;我们经常需要标注图像中的目标物体。对于常规的矩形框标注&#xff0c;LabelImg这类工具已经足够好用。但遇到倾斜物体时&#xff0c;比如遥感图像中的飞机、自然场景中的交通标志、医学图像中的器官&#…...

Super IO:Blender文件操作效率革命,实现300%工作流提速

Super IO&#xff1a;Blender文件操作效率革命&#xff0c;实现300%工作流提速 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io 在3D设计领域&#xff0c;文件导入导出的繁琐操作常常成…...

保姆级教程:用ColabFold在线版AlphaFold2,5分钟搞定你的第一个蛋白质结构预测

零门槛玩转蛋白质结构预测&#xff1a;ColabFold极简指南 蛋白质结构预测曾是生物信息学领域的"圣杯"&#xff0c;直到AlphaFold2的出现彻底改变了游戏规则。但传统方法需要复杂的本地环境配置和命令行操作&#xff0c;让许多感兴趣的非专业人士望而却步。现在&…...

Unpaywall扩展:一键解锁学术论文的终极免费方案

Unpaywall扩展&#xff1a;一键解锁学术论文的终极免费方案 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-extension …...

Kook Zimage 真实幻想 Turbo在软件测试中的应用:自动化UI设计验证

Kook Zimage 真实幻想 Turbo在软件测试中的应用&#xff1a;自动化UI设计验证 1. 引言&#xff1a;UI设计验证的痛点与机遇 在软件开发流程中&#xff0c;UI设计验证一直是个让人头疼的环节。测试人员需要对照设计稿&#xff0c;逐个像素检查界面元素的位置、颜色、字体和布局…...

ide-eval-resetter:突破JetBrains IDE试用期限制的创新方案——2026开发者必备指南

ide-eval-resetter&#xff1a;突破JetBrains IDE试用期限制的创新方案——2026开发者必备指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 问题引入&#xff1a;JetBrains IDE试用期限制的痛点分析 作为开发…...

像素剧本圣殿一文详解:复古未来像素美学×专业剧本格式输出规范

像素剧本圣殿一文详解&#xff1a;复古未来像素美学专业剧本格式输出规范 1. 工具概览与核心价值 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款专为影视、游戏编剧设计的AI创作工具。基于Qwen2.5-14B-Instruct大模型深度微调&#xff0c;它巧妙融合了8-Bi…...

别再只用官方节点了!手把手教你安装n8n社区节点,解锁隐藏工作流能力

解锁n8n隐藏潜能&#xff1a;社区节点深度应用指南 你是否曾在n8n中构建工作流时&#xff0c;发现官方节点无法满足某些特定需求&#xff1f;比如需要更复杂的文本处理、社交媒体深度集成&#xff0c;或是与某些小众API对接&#xff1f;这正是社区节点大显身手的时刻。作为n8n生…...

3个核心优势让研究者实现智能OCR全场景覆盖:Pix2Text开源替代方案详解

3个核心优势让研究者实现智能OCR全场景覆盖&#xff1a;Pix2Text开源替代方案详解 【免费下载链接】Pix2Text Pix In, Latex & Text Out. Recognize Chinese, English Texts, and Math Formulas from Images. 项目地址: https://gitcode.com/gh_mirrors/pi/Pix2Text …...

PyTorch 2.8镜像部署教程:RTX 4090D配置htop实时监控GPU/CPU/内存使用

PyTorch 2.8镜像部署教程&#xff1a;RTX 4090D配置htop实时监控GPU/CPU/内存使用 1. 环境准备与快速部署 在开始之前&#xff0c;请确保您的硬件配置满足以下要求&#xff1a; 显卡&#xff1a;RTX 4090D 24GB显存内存&#xff1a;120GB及以上存储&#xff1a;系统盘50GB …...