news 2026/5/26 6:17:29

【SpringBoot】配置文件 日志输出 lombok

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【SpringBoot】配置文件 日志输出 lombok

文章目录

  • 概述
  • Ⅰ. 什么是 Spring Boot 配置文件
  • Ⅱ. `properties` 配置文件:`@Value` && `@PostConstruct`
  • Ⅲ. `yml` 配置文件
    • 一、配置不同数据类型
    • 二、Map(字典 / 键值对)
    • 三、List(集合 / 数组)
      • ✅ 简单列表
      • ✅ 列表中的 Map
      • ✅ Map 中包含 List
    • 四、`@ConfigurationProperties` 读取 Map 和 List
  • Ⅳ. 日志级别的分类
  • Ⅴ. 日志配置
    • 一、配置日志级别
    • 二、日志持久化
      • 配置日志文件名
      • 配置日志的存储目录
      • 使用 logback-spring.xml 配置日志
  • Ⅵ. 配合 lombok 进行日志输出

概述

  1. .properties文件以键值类型配置,而.yml文件采用树形配置方式。
  2. 读取配置文件内容,使用@Value注解,注解内使用"${}"的格式读取对应内容。
  3. yml层级之间严格使用换行缩进的方式配置,keyvalue之间使用冒号加空格的方式设置,并且空格不可省略
  4. properties作为早期并且默认的配置文件格式,其配置存在一定的冗余数据,而使用yml可以很好的解决数据冗余的问题,但不适合复杂配置。
  5. yml可以和properties共存,如果存在冲突的内容,优先读取properties文件中的内容

Ⅰ. 什么是 Spring Boot 配置文件

Spring Boot支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到Spring Boot的目的。很多项目或者框架的配置信息也放在配置文件中,比如:

  1. 项目的启动端口
    1. Spring Boot内置了Tomcat服务器,默认端口号是8080,但是用户电脑上8080端口号有可能就被其他应用程序占用了,所以Spring Boot需要支持让用户自定义端口号。
  2. 数据库的连接信息(包含用户名和密码的设置)
    1. 为了更方便简单的访问数据库,出现了一些持久层框架,其实就是对JDBC进行了更深层次的封装。让用户通过简单几行代码就可完成数据库的访问。但是不同的应用程序访问的数据库不同,这些持久层框架就需要支持用户可以自定义配置数据库的连接信息。
  3. 第三方系统的调用密钥等信息
  4. 用于发现和定位问题的普通日志和异常日志等

Spring Boot配置文件有以下三种:

  • application.properties
  • application.yml(是 yaml 的简写)
  • application.yaml

当应用程序启动时,Spring Boot会自动从classpath路径找到并加载application.propertiesapplication.yaml或者application.yml文件。

也可以通过spring.config.name指定文件路径和名称,参考https://docs.spring.io/spring-boot/reference/features/external-config.html#features.external-config.files

Ⅱ.properties配置文件:@Value&&@PostConstruct

官方配置文档

基本的语法是键值对的形式,键值对之间用=隔开,如下所示:

# 配置项⽬端⼝号 server.port=9090 #配置数据库连接信息 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root

读取的时候,使用@Value注解搭配${}格式读取,如下所示:

@Controllerpublicclassdemo1{@Value("${spring.datasource.url}")privateStringurl;@Value("${spring.datasource.username}")privateStringname;// 不需要和键同名@Value("${spring.datasource.password}")privateStringpasswd;// 不需要和键同名@PostConstructpublicvoidinit(){System.out.println(url);System.out.println(name);System.out.println(passwd);}}

@PostConstruct注解的方法会在当前BeanSpring完全初始化之后自动执行一次,常用于初始化逻辑。

执行顺序如下所示:

static代码块(类加载时) → 构造方法 → 依赖注入 → @PostConstruct -> Bean ready

💥注意:static代码块是在类加载阶段就执行的,比@PostConstruct要早得多

Ⅲ.yml配置文件

yml是树形结构的配置文件,它的基础语法是"key: value",其中keyvalue之间使用英文冒号加空格的方式组成,并且空格不可省略

spring:datasource:url:jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=falseusername:rootpassword:root#正确的配置方式mykey1:java#错误的配置方式❌mykey2:java

注意:value值默认不用加上单引号或者双引号

yml读取配置的方式和properties相同,使用@Value注解即可,如下所示:

@Controllerpublicclassdemo2{@Value("${spring.datasource.url}")privateStringurl;@Value("${spring.datasource.username}")privateStringname;// 不需要和键同名@Value("${spring.datasource.password}")privateStringpasswd;// 不需要和键同名@Value("${mykey1}")privateStringmykey;// 不需要和键同名@PostConstructpublicvoidinit(){System.out.println(url);System.out.println(name);System.out.println(passwd);System.out.println(mykey);}}

一、配置不同数据类型

注意对应的类型在java后端接收的时候要使用对应的类型接收,不然容易出现类型不匹配的错误!

# 字符串string.value:Hello# 布尔值,true或falseboolean.value1:trueboolean.value2:false# 整数int.value:10# 浮点数float.value:3.14159# Null,用~表示null.value:~# 空字符串# 虽然直接后面什么都不加就可以了,但这种方式不直观,更多的表示是使用引号括起来empty.value:''

二、Map(字典 / 键值对)

YAML 中的Map表示的是一组key: value键值对,和 Java 的Map<String, Object>类似。

database:host:localhostport:3306username:rootpassword:123456

可以理解为:

{"database":{"host":"localhost","port":3306,"username":"root","password":"123456"}}

三、List(集合 / 数组)

YAML 中的List是通过-(短横线)表示的。

✅ 简单列表

fruits:-apple-banana-orange

相当于:

{"fruits":["apple","banana","orange"]}

✅ 列表中的 Map

servers:-name:server1ip:192.168.1.1-name:server2ip:192.168.1.2

相当于 Java 中的List<Map<String, String>>

{"servers":[{"name":"server1","ip":"192.168.1.1"},{"name":"server2","ip":"192.168.1.2"}]}

✅ Map 中包含 List

user:name:lirenhobbies:-coding-hiking-reading

等同于:

{"user":{"name":"liren","hobbies":["coding","hiking","reading"]}}

四、@ConfigurationProperties读取 Map 和 List

myapp:name:lirentags:-java-spring-yamlmetadata:version:v1.0author:liren dadaservers:-name:server1ip:192.168.1.1-name:server2ip:192.168.1.2

创建如下配置类:

@Data@Component@ConfigurationProperties("myapp")// 注意名称要对应publicclassMyApp{privateStringname;// 普通字段privateList<String>tags;// ListprivateMap<String,String>metadata;// MapprivateList<Server>servers;// 嵌套自定义对象@DatapublicstaticclassServer{privateStringname;privateStringip;}}

然后使用配置类:

@Controllerpublicclassdemo{@AutowiredprivateMyAppapp;@PostConstructpublicvoidinit(){System.out.println(app);}}// 运行结果:MyApp(name=liren,tags=[java,spring,yaml],metadata={version=v1.0,author=liren dada},servers=[Server(name=server1,ip=192.168.1.1),Server(name=server2,ip=192.168.1.2)])

Ⅳ. 日志级别的分类

日志的级别从高到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE

  • FATAL:致命信息,表示需要立即被处理的系统级错误。
  • ERROR:错误信息,级别较高的错误日志信息,但仍然不影响系统的继续运行。
  • WARN:警告信息,不影响使用,但需要注意的问题。
  • INFO:普通信息,用于记录应用程序正常运行时的一些信息,例如系统启动完成、请求处理完成等。
  • DEBUG:调试信息,需要调试时候的关键信息打印。
  • TRACE:追踪信息,比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使用DEBUG级别替代)。

Ⅴ. 日志配置

一、配置日志级别

​ 日志级别配置只需要在配置文件中设置logging.level配置项即可,如下所示:

​ Properties配置:

logging.level.root=debug

​ yml配置:

logging:level:root:debug

二、日志持久化

日志持久化有两种方式:

  1. 配置日志文件名
  2. 配置日志的存储目录

​ 若两种方式同时存在,则以配置日志文件名的方式为准!

配置日志文件名

​ Properties 配置:

logging.file.name=logger/springboot.log

​ yml 配置:

# 设置日志文件的文件名(可以跟绝对路径或者相对路径。)logging:file:name:logger/springboot.log

配置日志的存储目录

​ Properties 配置:

logging.file.path=D:/temp

​ yml 配置:

# 设置日志文件的目录logging:file:path:D:/temp

这种方式只能设置日志的路径,文件名固定为spring.log

使用 logback-spring.xml 配置日志

在抽奖系统项目中使用到了用 xml 文件来配置日志,如下所示,具体内容忘记了可以查阅 gpt:

<?xml version="1.0" encoding="UTF-8"?><configurationscan="true"scanPeriod="60 seconds"debug="false"><!-- springProfile作用:进行环境隔离,区分开发环境和生产环境 --><springProfilename="dev"><!-- appender是输出器,这里输出到控制台,核心是这个class,name只是下面要用于绑定日志级别的标识符 --><appendername="console"class="ch.qos.logback.core.ConsoleAppender"><!-- encoder作用:日志格式 --><encoder><pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n%ex</pattern></encoder></appender><!-- root日志级别设置为info,所有日志从 INFO 级别开始往上打印,并且输出到 console --><rootlevel="info"><appender-refref="console"/></root></springProfile><springProfilename="prod,test"><!-- 定义变量 --><propertyname="logback.logErrorDir"value="/root/lottery-system/logs/error"/><propertyname="logback.logInfoDir"value="/root/lottery-system/logs/info"/><propertyname="logback.appName"value="lotterySystem"/><!-- 给整个 Logback 日志上下文起“名字”为lotterySystem--><contextName>${logback.appName}</contextName><!-- ERROR级别的日志配置如下 --><appendername="fileErrorLog"class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则 如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天 的日志改名为今天的日期。即,<File> 的日志都是当天的。 --><File>${logback.logErrorDir}/error.log</File><!-- 日志level过滤器,保证error.xxx.log中只记录ERROR级别的日志--><filterclass="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><!--滚动策略(按天滚动),按照时间滚动 TimeBasedRollingPolicy--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间--><FileNamePattern>${logback.logErrorDir}/error.%d{yyyy-MM-dd}.log</FileNamePattern><!--只保留最近14天的日志--><maxHistory>14</maxHistory><!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志--><!--<totalSizeCap>1GB</totalSizeCap>--></rollingPolicy><!--日志输出编码格式化--><encoder><charset>UTF-8</charset><pattern>%d [%thread] %-5level %logger{36} %line - %msg%n%ex</pattern></encoder></appender><!--INFO级别的日志配置如下--><appendername="fileInfoLog"class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则 如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天 的日志改名为今天的日期。即,<File> 的日志都是当天的。 --><File>${logback.logInfoDir}/info.log</File><!--自定义过滤器,保证info.***.log中只打印INFO级别的日志, 填写全限定路径--><!-- 因为内置的 LevelFilter 只能过滤一个级别或以上,所以才要自定义 --><filterclass="com.example.lotterysystem.common.filter.InfoLevelFilter"/><!--滚动策略,按照时间滚动 TimeBasedRollingPolicy--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间--><FileNamePattern>${logback.logInfoDir}/info.%d{yyyy-MM-dd}.log</FileNamePattern><!--只保留最近14天的日志--><maxHistory>14</maxHistory><!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志--><!--<totalSizeCap>1GB</totalSizeCap>--></rollingPolicy><!--日志输出编码格式化--><encoder><charset>UTF-8</charset><pattern>%d [%thread] %-5level %logger{36} %line - %msg%n%ex</pattern></encoder></appender><!-- 所有日志 ≥INFO 的都会触发 --><rootlevel="info"><appender-refref="fileErrorLog"/><appender-refref="fileInfoLog"/></root></springProfile></configuration>

💥注意:需要在项目配置文件中添加该文件的路径

## logback xml ## logging.config=classpath:logback-spring.xml spring.profiles.active=dev #spring.profiles.active=prod

Ⅵ. 配合 lombok 进行日志输出

​ 添加 lombok 依赖:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

​ 在想要使用日志的类中添加注解即可:

importlombok.extern.slf4j.Slf4j;importorg.springframework.web.bind.annotation.RestController;@Slf4j@RestControllerpublicclassLogController{publicvoidlog(){log.info("--------------要输出日志的内容----------------");}}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 0:19:20

【干货收藏】手把手教你申请软件著作权,一篇搞定全流程!

还在为申请软著头疼&#xff1f;别急&#xff01;这份超详细攻略带你轻松走完所有流程&#xff0c;从注册到拿证&#xff0c;一步都不少&#xff01;第一步&#xff1a;注册与实名 先登录「中国版权保护中心」官网&#xff0c;注册账号并完成实名认证&#xff0c;这是申请的第一…

作者头像 李华
网站建设 2026/5/25 6:14:02

FaceFusion支持三维人脸建模输出吗?OBJ格式导出测试

FaceFusion支持三维人脸建模输出吗&#xff1f;OBJ格式导出测试 在数字内容创作日益智能化的今天&#xff0c;AI驱动的人脸处理工具正以前所未有的速度重塑影视、游戏和虚拟现实的工作流程。FaceFusion作为当前开源社区中最具影响力的人脸交换项目之一&#xff0c;凭借其高保真…

作者头像 李华
网站建设 2026/5/25 23:44:24

告别PPT焦虑:百考通AI如何用智能模板重塑学术演示体验

在学术研究的漫长征途上&#xff0c;从开题报告的初次亮相到毕业答辩的终极考验&#xff0c;一份逻辑清晰、设计专业的PPT往往是研究者展示成果、传递思想的关键载体。然而&#xff0c;现实情况是&#xff0c;许多研究生和职场新人将大量宝贵时间耗费在了模板搜寻、格式调整与内…

作者头像 李华
网站建设 2026/5/24 5:12:32

告别“闭门造车”,AI智能问卷设计,百考通助你精准捕捉用户心声!

在市场调研、用户研究、学术调查乃至内部管理中&#xff0c;一份设计精良的问卷是获取真实、有效数据的基石。然而&#xff0c;设计一份既能精准触达核心问题&#xff0c;又能引导受访者顺畅作答&#xff0c;还能确保数据可分析、有价值的问卷&#xff0c;却是一项极具挑战性的…

作者头像 李华
网站建设 2026/5/26 2:24:29

3步掌握Flowblade:Linux上最顺手的开源视频剪辑工具

3步掌握Flowblade&#xff1a;Linux上最顺手的开源视频剪辑工具 【免费下载链接】flowblade Video Editor for Linux 项目地址: https://gitcode.com/gh_mirrors/fl/flowblade 如果你正在寻找一款功能强大又易于上手的Linux视频编辑软件&#xff0c;那么Flowblade绝对值…

作者头像 李华
网站建设 2026/5/26 2:09:34

Android11 新特性与适配指南

Android 11&#xff08;API 30&#xff09;引入了多项重要特性和权限变更&#xff0c;核心集中在存储权限、后台位置、包可见性、前台服务 等方面。本文基于 Kotlin 语言&#xff0c;从核心变更点、适配方案、代码示例等维度讲解适配要点。 一、核心变更概览 变更类别核心影响…

作者头像 李华