Spring Boot 配置文件、日志
一、Spring Boot 配置文件详解
1. 为什么需要配置文件?
在软件开发中,我们常常会有一些会变动的参数,比如:
- 端口号
- 数据库连接信息
- 第三方 API 的密钥
- 日志路径
如果把这些值直接写死在代码里(硬编码),每次修改都得重新编译、打包、上线,非常麻烦。
配置文件的出现,就是为了将可变信息与代码分离,程序启动时从配置文件读取数据。
Spring Boot 提供了两种主要配置文件格式:
- application.properties(早期默认)
- application.yml / application.yaml(现代推荐)
2. 配置文件的加载规则
Spring Boot 启动时,会自动从 classpath 根路径 加载:
application.properties
application.yml
3. application.properties 基本用法
application.properties
是 键值对 格式:
# 修改项目端口
server.port=8081
# 数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
读取配置
@RestController
public class MyController {
@Value("${server.port}")
private String port;
@RequestMapping("/port")
public String getPort() {
return "当前端口:" + port;
}
}
4. application.yml 基本用法
YAML 是一种层级结构配置方式,可读性更好:
server:
port: 8082
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: root
注意
:
后面要有空格- 缩进只能用空格(不能用 Tab)
- 同级用相同缩进,不同级用 2~4 个空格表示层级
5. 读取 YAML 配置
读取单个值
@RestController
public class MyController {
@Value("${server.port}")
private String port;
@RequestMapping("/port")
public String getPort() {
return "当前端口:" + port;
}
}
读取对象
student:
id: 1
name: Tom
age: 18
@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private int id;
private String name;
private int age;
}
6. YAML 支持的数据类型
string.value: Hello
boolean.value: true
int.value: 10
float.value: 3.14
null.value: ~
empty.value: ''
list.value:
- Java
- Python
- Go
map.value:
key1: value1
key2: value2
7. 优缺点对比
格式 | 优点 | 缺点 |
---|---|---|
properties | 语法简单,兼容性好 | 冗余多,嵌套结构不直观 |
yml/yaml | 可读性高,支持复杂数据结构 | 对缩进要求高,不适合非常复杂的配置 |
建议:
- 小型项目:随意选择
- 中大型项目:统一使用
yml
,便于维护
9. 总结
- Spring Boot 支持
application.properties
和application.yml
- 建议在一个项目中统一使用一种格式
- 简单值用
@Value
,复杂对象/集合用@ConfigurationProperties
yml
对缩进非常敏感,注意空格
好,我帮你结合你上传的 《Spring Boot 日志》PDF 内容,整理一篇Spring Boot 日志入门使用教程,保留核心知识、加上一些实践示例,让你可以直接上手。
帮你把文章稍微优化得更简洁流畅,格式更统一,方便直接发布或阅读:
二、Spring Boot 日志入门教程
1. 为什么要用日志?
在 Java SE 中,最早用 System.out.println()
打印信息,但在实际开发中,日志作用更广:
- 问题排查:快速定位错误,分析系统状态。
- 系统监控:监控响应时间、错误频率等关键指标。
- 数据采集:记录用户行为,用于数据分析和推荐。
- 安全审计:追踪操作,防止违规和数据篡改。
System.out.print
功能有限,专业日志框架满足更多需求。
2. Spring Boot 的日志框架
Spring Boot 默认集成了 SLF4J(日志门面)和 Logback(默认实现):
- SLF4J 提供统一日志 API,底层实现可切换(如 Log4j、Logback)。
- Logback 高性能、功能强大,是 Spring Boot 默认使用的日志实现。
门面模式使多个日志实现共存时避免冲突。
3. 日志使用示例
3.1 获取 Logger 对象
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
@RestController
public class LoggerController {
private static final Logger logger = LoggerFactory.getLogger(LoggerController.class);
@RequestMapping("/logger")
public String logger() {
logger.info("这是一个 info 级别的日志");
return "日志已输出";
}
}
注意:Logger 来自
org.slf4j
包。
3.2 使用 Lombok 简化日志代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
public class LogController {
@RequestMapping("/log")
public String log() {
log.info("Lombok @Slf4j 输出的日志");
return "ok";
}
}
添加 Lombok 依赖(pom.xml
):
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
4. 日志级别
从高到低:
FATAL > ERROR > WARN > INFO > DEBUG > TRACE
- FATAL:致命错误(Logback 无,映射到 ERROR)
- ERROR:错误,影响功能
- WARN:警告,需关注
- INFO:常规信息
- DEBUG:调试信息
- TRACE:更详细的调试
Spring Boot 默认只输出 INFO
及以上。
5. 修改日志级别
application.properties
logging.level.root=debug
application.yml
logging:
level:
root: debug
6. 日志持久化(写入文件)
6.1 按文件名配置
logging:
file:
name: logs/springboot.log # 相对或绝对路径
日志直接写入指定文件,例如:
logs/
springboot.log
6.2 按路径配置
logging:
file:
path: D:/temp
日志写入指定目录下默认文件 spring.log
,例如:
D:/temp/
spring.log
6.3 配置优先级
logging:
file:
name: logger/springboot.log
path: D:/temp
优先使用 logging.file.name
,logging.file.path
会被忽略。
7. 日志文件分割配置
logging:
logback:
rollingpolicy:
file-name-pattern: "${LOG_FILE}.%d{yyyy-MM-dd}.%i"
max-file-size: 200MB
分割后日志文件名示例:
springboot.log.2025-08-12.1
springboot.log.2025-08-12.2
8. 自定义日志格式
logging:
pattern:
console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
格式说明:
%d
:日期时间%c
:类名%M
:方法名%L
:行号%thread
:线程名%m
:日志内容%n
:换行符
9. 实战建议
- 开发环境使用
DEBUG
级别,方便调试。 - 生产环境用
INFO
级别,降低日志量。 - 配置日志文件分割,防止单文件过大。
- 重点记录业务流程、异常堆栈、安全操作。
10. 总结
- Spring Boot 默认集成 SLF4J + Logback。
- 使用
LoggerFactory
或 Lombok@Slf4j
获取日志对象。 - 配置日志级别、文件路径、分割策略和格式。
- 合理使用日志级别,避免日志风暴。
- 日志是调试、监控和审计的重要工具。