Spring Boot 配置文件、日志

发布于:2025-08-14 ⋅ 阅读:(11) ⋅ 点赞:(0)

一、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. 总结

  1. Spring Boot 支持 application.propertiesapplication.yml
  2. 建议在一个项目中统一使用一种格式
  3. 简单值用 @Value,复杂对象/集合用 @ConfigurationProperties
  4. 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.namelogging.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 获取日志对象。
  • 配置日志级别、文件路径、分割策略和格式。
  • 合理使用日志级别,避免日志风暴。
  • 日志是调试、监控和审计的重要工具。

网站公告

今日签到

点亮在社区的每一天
去签到