Spring(五):Spring Boot 的配置和日志

Spring Boot中的配置文件起到了非常重要的作用。在Spring Boot中,可以通过配置文件来配置应用程序的一系列属性,包括数据库连接、服务器端口号、日志级别等等。通过配置文件,可以方便地对应用程序进行配置管理和集中管理。另外,Spring Boot中还支持多种配置文件格式,包括properties、yaml、json等,可以根据实际情况选择使用适合自己的配置文件格式。同时,Spring Boot还提供了一系列注解和工具类,可以方便地读取和解析配置文件的内容,使配置文件的使用变得更加简单和灵活。

1. 配置文件的作用

整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:

1)数据库的连接信息(包含⽤户名和密码的设置);

2)项⽬的启动端⼝;

3)第三⽅系统的调⽤秘钥等信息;

4)⽤于发现和定位问题的普通⽇志和异常⽇志等。

2.配置文件的格式

Spring Boot 配置文件主要分为两种格式

1) .properties

  1. .yml(.yaml)

Spring 有个自动识别的

并且这两种后缀是可以同时存在的,我们来看看:

在Spring Boot中,可以同时使用.yml和.properties文件作为配置文件,但是如果同时存在相同的配置属性,以.properties文件中的属性为准。因为Spring Boot会首先加载.properties文件,然后再加载.yml文件,如果存在相同的属性,后面加载的.yml文件不会覆盖前面加载的.properties文件中的属性。如果想要优先使用.yml文件中的配置,可以在application.properties文件中添加以下配置:

spring.config.name=application

当yaml和properties文件同时存在于Spring Boot应用程序的classpath下时,加载顺序是以文件名的字母顺序为准的。具体来说,Spring Boot首先会加载所有以application.properties结尾的文件,然后再加载以application.yml结尾的文件。如果两个文件名相同,则yaml文件的优先级高于properties文件。

例如,如果同时存在application.properties和application.yml文件,则Spring Boot会首先加载application.properties文件,然后再加载application.yml文件。如果存在greeting.properties和greeting.yml文件,则Spring Boot会首先加载greeting.properties文件,然后再加载greeting.yml文件。但是,如果存在greeting.properties和greeting.yaml文件,则Spring Boot会首先加载greeting.yaml文件,因为yaml文件的字母顺序要比properties文件高。

我们来试试看:

补充另外一种情况: 在只有yml和yaml情况下,以yml为准。

2.1 两种格式对比

properties

properties 链接案例:

ini 复制代码
spring.datasource.url=jdbc:mysql://localhost:3306/database_name
spring.datasource.username=root
spring.datasource.password=123456
 

缺点
从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息。

yml

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是"另⼀种标记语
⾔"。

所以我们之前写的 yaml 也是可行的。

yml 优点分析:

  1. yml 是⼀个可读性⾼,写法简单、易于理解,它的语法和 JSON 语⾔类似。
  2. yml ⽀持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使⽤空⽩ 符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
    3. yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、
    JavaScript、Perl 中

yml基本语法:
yml 是树形结构的配置⽂件,它的基础语法是"key: value",注意 key 和 value 之间使⽤英⽂冒汗加空 格的⽅式组成的,其中的空格不可省略。
基础语法如下:

spring:
  datasource:
  url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
  username: root
  password: 

3. ⽇志⽂件

1. 日志有啥用?

⽇志对于我们来说,最主要的⽤途就是排除 和 定位问题。
除了发现和定位问题之外,我们还可以通过⽇志实现以下功能

  • 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
  • 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
  • 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持

2. 简单配置

如果不需要进行复杂的日志配置,则在配置文件中进行简单的日志配置即可,默认情况下,SpringBoot日志只记录到控制台,不写日志文件。如果希望在控制台输出之外编写日志文件,则需要在 application.yml 配置文件中进行配置

logging:
  file:
    name:  D:/Projects/spring-test.log  # 日志文件绝对路径及名称
  level:
    root: info #日志级别 root表示所有包,也可以单独配置具体包 fatal>error>warn>info>debug>trace>off

注意: Spring Boot中的logging.path和logging.file这2个属性,只需要配置其中之一即可,如果同时配置,则使用logging.file属性。

当配置了loggin.path属性时,将在该路径下生成spring.log文件,即:此时使用默认的日志文件名spring.log

当配置了loggin.file属性时,将在指定路径下生成指定名称的日志文件。默认为项目相对路径,可以为logging.file指定绝对路径

3. 如何在程序中得到日志对象

在程序中获取日志对象需要使用到日志工厂: LoggerFactory

得到日志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);

日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才方便、更直观的定位到问题类

这里需要注意, Logger 对象是属于 org.slf4j 包下的,不要导错了。

4. ⽇志级别

4.1 日志级别有啥用?

  • ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇ 志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。
  • ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息, ⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。

4.2 日志级别分类:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认⽇志级别);
  • warn:警告,不影响使⽤,但需要注意的问题;
  • error:错误信息,级别较⾼的错误⽇志信息;
  • fatal:致命的,因为代码异常导致程序退出执⾏的事件。

⽇志级别设置

日志级别配置只需要在配置文件中设置 " logging.level " 配置项即可:

logging:
    level:
        root: error

5. 更简单的日志输出 -- lombok

每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦,这⾥讲⼀ 种更好⽤的⽇志输出⽅式,使⽤ lombok 来更简单的输出。

  1. 添加 lombok 框架支持
  2. 使用 @slf4j 注解输出日志

添加依赖:

5.1 输出日志

举例:

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {
    @RequestMapping("/log")
    public void loggerTest() {
        log.error("------------------- error -----------------");
    }
}

当我们访问这个 web 网页时:

他就会打印出这个日志。

总结:
⽇志是程序中的重要组成部分,使⽤⽇志可以快速的发现和定位问题,Spring Boot 内容了⽇志框架,默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解
和 log 对象快速的打印⾃定义⽇志,⽇志包含 6 个级别:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息;
  • warn:警告,不影响使⽤,但需要注意的问题;
  • error:错误信息,级别较⾼的错误⽇志信息;
  • fatal:致命的,因为代码异常导致程序退出执⾏的事件。

⽇志级别依次提升,⽽⽇志界别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称或 保存⽬录来将⽇志永久地保存下来。

相关推荐
激流丶6 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue10 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式26 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画32 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
Heavydrink1 小时前
HTTP动词与状态码
java
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
计算机-秋大田1 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue
神里大人2 小时前
idea、pycharm等软件的文件名红色怎么变绿色
java·pycharm·intellij-idea
小冉在学习2 小时前
day53 图论章节刷题Part05(并查集理论基础、寻找存在的路径)
java·算法·图论