轻松玩转 Spring Boot(二)YAML配置文件、日志配置

轻松玩转 Spring Boot(二)YAML配置文件、日志配置

前言

在本博客中,我们将深入探讨如何使用 YAML 文件配置 Log4j2,从而实现对日志的细粒度控制。YAML 格式因其简洁明了、易于阅读而受到广泛欢迎,这使得它成为配置文件的理想选择。我们将展示如何创建和使用 log4j2.yml 配置文件,并结合 Spring Boot 的特性来优化我们的日志管理。


YAML配置⽂件

基本语法

  • 键值对: 使用冒号 : 分隔键和值。
  • 字符串: 字符串可以直接书写,也可以用引号括起来(单引号或双引号均可)。
  • 列表使用破折号 - 开头,每个项占据一行。列表也可以嵌套其他列表或字典。
  • 字典可以嵌套,并通过缩进表示层级关系。
  • YAML 使用空格进行缩进。通常使用两个空格来表示一个层级,但不可混用空格和制表符(Tab),且不应使用过多或过少的空格。
  • 注释以 # 开头,注释内容在该行的任意位置均可。
  • YAML 支持多种数据类型,包括字符串、整数、浮点数、布尔值、日期等。
  • 可以在同一个 YAML 文件中定义多个文档,每个文档之间用 — 分隔。
  • 可以使用锚和别名来引用已定义的内容。

⼩技巧:lombok

Lombok 是一个 Java 库,旨在通过减少样板代码(boilerplate code)来简化 Java 开发,尤其是在处理数据类(POJO)时。它提供了一系列注解,可以自动生成常用的代码,如构造函数、getter/setter、toString、hashCode 和 equals 方法等,从而提高开发效率。

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>compile</scope></dependency>

使用@Data注解,这是一个组合注解,包含了 @Getter、@Setter、@ToString、@EqualsAndHashCode 和 @RequiredArgsConstructor 的功能。

@DatapublicclassUser{privateString name;privateint age;privateString email;privateAddress address;privateList<Role> roles;privateList<String> interests;@DatapublicstaticclassAddress{privateString street;privateString city;privateString state;privateString zipCode;}@DatapublicstaticclassRole{privateString roleName;privateString description;}}

对应的yaml文件内容:

name: Jane Smith age: 28 email: [email protected] address: street: 456 St city: Springfield state: IL zipCode: "62701" roles: - roleName: ADMIN description: Administrator with full access - roleName: USER description: Regular user with limited access interests: - Reading - Traveling - Cooking 

细节:
属性 birthDay 推荐写为 birth-day。
文本说明:

  • 单引号不会转义:例如,\n 会被视为普通字符串显示。
  • 双引号会转义:例如,\n 会被识别为换行符。

大文本格式:

  • 使用 | 开头:大文本写在下方,保留文本格式,换行符将正确显示。
  • 使用 > 开头:大文本写在下方,折叠换行符。

多文档合并:

  • 使用 — 可以将多个 YAML 文档合并到一个文档中,每个文档的内容仍然被视为独立。

日志配置

在这里插入图片描述

简介

Spring 使用 Commons Logging 作为内部日志框架,但底层日志实现是开放的,可以与多种日志框架对接。

  1. 从 Spring 5 及以后版本开始,Commons Logging 的实现已经被 Spring 自行编写。
  2. Spring 支持多种日志框架,包括 Java Util Logging (JUL)、Log4j2 和 Logback。Spring Boot 提供了默认的控制台输出配置,同时也可以配置日志输出到文件。
  3. Logback 是 Spring Boot 默认使用的日志实现框架。
  4. 尽管有许多日志框架可供选择,但用户无需担心,使用 Spring Boot 的默认配置即可满足大部分需求,并且能够很好地工作。

Spring Boot 默认配置日志的方式如下:

  1. 每个 Spring Boot Starter 场景都会引入一个核心依赖,即 spring-boot-starter。
  2. 核心场景中会包含日志相关的功能,通过引入 spring-boot-starter-logging 来实现。
  3. 默认情况下,Spring Boot 使用 Logback 和 SLF4J 的组合作为底层日志框架。
  4. 日志系统在应用启动时即被初始化,xxxAutoConfiguration 是在系统启动完成后配置的组件。
  5. 日志的配置是通过监听器机制实现的,具体使用了 ApplicationListener。
  6. 所有日志相关的配置都可以通过修改配置文件来实现,所有以 logging 开头的配置项均可用于定制日志行为。

日志格式

在这里插入图片描述


Spring Boot 默认的日志输出格式包含以下几个部分:

  1. 时间和日期:具有毫秒级精度。
  2. 日志级别:包括 ERROR、WARN、INFO、DEBUG 和 TRACE 级别。
  3. 进程 ID:标识当前运行的进程。
  4. 分隔符:使用 “—” 来分隔不同的日志内容。
  5. 线程名:用方括号 [] 包含线程名称。
  6. Logger 名称:通常指生成日志的类名。
  7. 消息:即实际记录的日志内容。

需要注意的是,Logback 中并没有 FATAL 级别,FATAL 级别的日志会被视为 ERROR 级别处理。

记录日志

Logger logger =LoggerFactory.getLogger(getClass()); 或者使⽤Lombok的@Slf4j注解 
@ServicepublicclassMyService{privatefinalLogger logger =LoggerFactory.getLogger(getClass());publicvoidperformTask(){ logger.info("Task is starting...");// 业务逻辑}}
@Slf4j@ServicepublicclassMyService{publicvoidperformTask(){ log.info("Task is starting...");// 业务逻辑}}

日志级别

在日志记录中,只有指定级别及以上的日志信息会被打印。日志级别的定义如下:

  • ALL:打印所有日志信息。
  • TRACE:用于追踪框架的详细流程,一般在开发阶段使用,不建议在生产环境中开启。
  • DEBUG:用于开发调试的详细信息,帮助开发者分析代码执行过程。
  • INFO:记录关键和感兴趣的信息,适合用于了解应用的运行状态。
  • WARN:记录警告信息,这些信息可能不是错误,但需要引起注意,例如版本过时的提示。
  • ERROR:记录业务错误信息,例如出现各种异常情况。
  • FATAL:记录致命错误,通常指系统崩溃或严重故障,例如 JVM 崩溃。
  • OFF:关闭所有日志记录。

如果不为特定类指定日志级别,则会使用根 Logger(root logger)所指定的级别作为默认级别。需要注意的是,Spring Boot 的默认日志级别设置为 INFO

在 application.properties 或 application.yml 中,可以通过配置以下格式来指定日志级别:

logging: level: root: info 

可配置的日志级别包括: TRACE、DEBUG、INFO、WARN、ERROR、FATAL 和 OFF。这些级别定义在 LogLevel 类中,分别表示日志的重要性和详细程度。
根 Logger 的名称为 root,可以通过以下方式配置其日志级别:

logging.level.root=<level>

logging.level.root=WARN 表示所有未指定日志级别的 Logger 都将使用根 Logger 的 WARN 级别。这意味着只有 WARN、ERROR 和 FATAL 级别的日志信息会被记录,而 TRACE、DEBUG 和 INFO 级别的日志将被忽略。

⽇志分组

精确调整某个包下的日志级别

logging.level.com.example.user=DEBUG logging.level.com.example.order=WARN logging.level.com.example.payment=INFO 

将相关的logger分组在⼀起,统⼀配置。SpringBoot 也⽀持。

logging: level: ahc: info group: ahc: com.itheima.controller,com.itheima.service 

SpringBoot 预定义两个组

在这里插入图片描述

文件输出

在 Spring Boot 中,默认情况下,日志信息只会输出到控制台。如果希望将日志信息额外记录到文件中,可以在 application.properties 文件中添加以下配置项:

  • logging.file.name:指定日志文件的名称及路径。
  • logging.file.path:指定日志文件的存储路径。使用此配置时,您需要确保指定的路径是有效且可写的。
在这里插入图片描述

⽂件归档与滚动切割

归档:将每天生成的日志单独存储到一个文件中,以便于管理和查阅。
切割:每个日志文件的大小限制为 10MB。一旦日志文件超过该大小,将自动切割并创建一个新的日志文件。

  1. 每天生成的日志应独立分割并存档。如果使用 Logback(Spring Boot 默认集成的日志框架),可以通过 application.properties 或 application.yml 文件来指定日志滚动规则。
  2. 如果使用其他日志系统,需要手动配置,例如添加 log4j2.xml 或 log4j2-spring.xml 文件以设置日志滚动策略。
  3. 支持的滚动规则设置可以根据具体需求进行配置。
在这里插入图片描述
logging.file.name=logs/app.log logging.pattern.rolling-file-name=logs/app-%d{yyyy-MM-dd}.log logging.file.size=10MB logging.file.max-history=30 # 保留过去30天的日志 

ogs/app-%d{yyyy-MM-dd}.log 的作用是:
每天创建一个新的日志文件,文件名中包含当前日期。例如,如果今天是 2026 年 1 月 23 日,则生成的日志文件名称将是 app-2026-01-23.log。
将所有生成的日志文件存储在 logs 目录下,以便于管理和查找。

⾃定义配置

在这里插入图片描述


如果可以的话,我们建议您在日志配置中使用以 -spring 结尾的变量,例如 logback-spring.xml,而不是使用 logback.xml。这是因为如果使用标准配置文件,Spring 将无法完全控制日志的初始化过程。

最佳实践:在编写自定义配置时,建议将配置文件命名为 xx-spring.xml 形式,以便 Spring 能够正确加载和处理这些配置。

切换日志组合

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><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>

< exclusions>:排除 spring-boot-starter 中的 spring-boot-starter-logging 依赖。Spring Boot 默认使用 Logback 作为日志框架,通过排除这个依赖,您可以避免使用 Logback,从而能够引入其他日志框架。
spring-boot-starter-log4j2:这个依赖将引入 Log4j2 作为日志框架。通过添加这个依赖,Spring Boot 会自动配置 Log4j2,并允许您使用 Log4j2 的特性来管理日志。
log4j2⽀持yaml和json格式的配置⽂件

在这里插入图片描述
  1. 导⼊任何第三方框架,先排除它的⽇志包,因为Boot底层控制好了⽇志
  2. 修改 application.properties 配置⽂件,就可以调整⽇志的所有⾏为。如果不够,可
    以编写日志框架自己的配置⽂件放在类路径下就行,比如 logback-spring.xml , log4j2-spring.xml
  3. 如需对接专业⽇志系统,也只需要把 logback 记录的⽇志灌倒 kafka之类的中间件,这和
    SpringBoot没关系,都是⽇志框架自己的配置,修改配置⽂件即可
  4. 业务中使⽤slf4j-api记录⽇志。不要再 sout 了。

application.yaml文件内容:

logging: level: root: INFO com.itheima: DEBUG # 可以按需调整日志级别 log4j2: configurationFile: classpath:log4j2.yml # 指向 YAML 配置文件 

log4j2.yaml文件内容如下:

Configuration: status: WARN Appenders: Console: name: Console PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" RollingFile: name: RollingFile fileName: "logs/app.log" filePattern: "logs/app-%d{yyyy-MM-dd}-%i.log.gz" Policies: SizeBasedTriggeringPolicy: size: "10MB" TimeBasedTriggeringPolicy: interval: 1 modulate: true PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" Loggers: Root: level: info AppenderRef: - ref: Console - ref: RollingFile 
@ServicepublicclassMyService{privatestaticfinalLogger logger =LoggerFactory.getLogger(MyService.class);publicvoidperformAction(){ logger.info("Performing an action...");// 其他业务逻辑}}

总结

希望通过本文的介绍,您能够掌握使用 YAML 文件进行日志配置的技巧,并在自己的 Spring Boot 项目中有效应用这些知识。如有任何问题或进一步的讨论,欢迎在评论区留言!

Read more

安装 启动 使用 Neo4j的超详细教程

安装 启动 使用 Neo4j的超详细教程

最近在做一个基于知识图谱的智能生成项目。需要用到Neo4j图数据库。写这篇文章记录一下Neo4j的安装及其使用。 一.Neo4j的安装 1.首先安装JDK,配环境变量。(参照网上教程,很多) Neo4j是基于Java的图形数据库,运行Neo4j需要启动JVM进程,因此必须安装JAVA SE的JDK。从Oracle官方网站下载 Java SE JDK。我使用的版本是JDK1.8 2.官网上安装neo4j。 官方网址:https://neo4j.com/deployment-center/  在官网上下载对应版本。Neo4j应用程序有如下主要的目录结构: bin目录:用于存储Neo4j的可执行程序; conf目录:用于控制Neo4j启动的配置文件; data目录:用于存储核心数据库文件; plugins目录:用于存储Neo4j的插件; 3.配置环境变量 创建主目录环境变量NEO4J_HOME,并把主目录设置为变量值。复制具体的neo4j文件地址作为变量值。 配置文档存储在conf目录下,Neo4j通过配置文件neo4j.conf控制服务器的工作。默认情况下,不需

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程 在数字化办公日益普及的今天,企业微信作为国内领先的企业级通讯工具,其群机器人功能为团队协作带来了极大的便利。本文将手把手教你如何从零开始配置企业微信群机器人Webhook,实现自动化消息推送,提升团队沟通效率。 1. 准备工作与环境配置 在开始创建机器人之前,需要确保满足以下基本条件: * 企业微信账号:拥有有效的企业微信管理员或成员账号 * 群聊条件:至少包含3名成员的群聊(这是创建机器人的最低人数要求) * 网络环境:能够正常访问企业微信服务器 提示:如果是企业管理员,建议先在"企业微信管理后台"确认机器人功能是否已对企业开放。某些企业可能出于安全考虑会限制此功能。 2. 创建群机器人 2.1 添加机器人到群聊 1. 打开企业微信客户端,进入目标群聊 2. 点击右上角的群菜单按钮(通常显示为"..."或"⋮") 3. 选择"添加群机器人"选项 4.

Flowise物联网融合:与智能家居设备联动的应用设想

Flowise物联网融合:与智能家居设备联动的应用设想 1. Flowise:让AI工作流变得像搭积木一样简单 Flowise 是一个真正把“AI平民化”落地的工具。它不像传统开发那样需要写几十行 LangChain 代码、配置向量库、调试提示词模板,而是把所有这些能力打包成一个个可拖拽的节点——就像小时候玩乐高,你不需要懂塑料怎么合成,只要知道哪块该拼在哪,就能搭出一座城堡。 它诞生于2023年,短短一年就收获了45.6k GitHub Stars,MIT协议开源,意味着你可以放心把它用在公司内部系统里,甚至嵌入到客户交付的产品中,完全不用担心授权问题。最打动人的不是它的技术多炫酷,而是它真的“不挑人”:产品经理能搭出知识库问答机器人,运营同学能配出自动抓取竞品文案的Agent,连刚学Python两周的实习生,也能在5分钟内跑通一个本地大模型的RAG流程。 它的核心逻辑很朴素:把LangChain里那些抽象概念——比如LLM调用、文档切分、向量检索、工具调用——变成画布上看得见、摸得着的方块。你拖一个“Ollama LLM”节点,再拖一个“Chroma Vector

OpenClaw配置Bot接入飞书机器人+Kimi2.5

OpenClaw配置Bot接入飞书机器人+Kimi2.5

上一篇文章写了Ubuntu_24.04下安装OpenClaw的过程,这篇文档记录一下接入飞书机器+Kimi2.5。 准备工作 飞书 创建飞书机器人 访问飞书开放平台:https://open.feishu.cn/app,点击创建应用: 填写应用名称和描述后就直接创建: 复制App ID 和 App Secret 创建成功后,在“凭证与基础信息”中找到 App ID 和 App Secret,把这2个信息复制记录下来,后面需要配置到openclaw中 配置权限 点击【权限管理】→【开通权限】 或使用【批量导入/导出权限】,选择导入,输入以下内容,如下图 点击【下一步,确认新增权限】即可开通所需要的权限。 配置事件与回调 说明:这一步的配置需要先讲AppId和AppSecret配置到openclaw成功之后再设置订阅方式,