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


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

    1. 配置文件的作用

    整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:
    1)数据库的连接信息(包含⽤户名和密码的设置);
    2)项⽬的启动端⼝;
    3)第三⽅系统的调⽤秘钥等信息;
    4)⽤于发现和定位问题的普通⽇志和异常⽇志等。

    2.配置文件的格式

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

    1) .properties

    2)    .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 链接案例:

    1. spring.datasource.url=jdbc:mysql://localhost:3306/database_name
    2. spring.datasource.username=root
    3. 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 之间使⽤英⽂冒汗加空 格的⽅式组成的,其中的空格不可省略。
    基础语法如下:

    1. spring:
    2. datasource:
    3. url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
    4. username: root
    5. password:

     3. ⽇志⽂件

    1. 日志有啥用?

    ⽇志对于我们来说,最主要的⽤途就是排除 和 定位问题。
    除了发现和定位问题之外,我们还可以通过⽇志实现以下功能
    • 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
    • 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
    • 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持

    2. 简单配置

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

    1. logging:
    2. file:
    3. name: D:/Projects/spring-test.log # 日志文件绝对路径及名称
    4. level:
    5. 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 

    1. 得到日志对象
    2. 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 ” 配置项即可:

    1. logging:
    2. level:
    3. root: error

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

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

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

    添加依赖:

    5.1 输出日志 

    举例:

    1. import lombok.extern.slf4j.Slf4j;
    2. import org.springframework.web.bind.annotation.RequestMapping;
    3. import org.springframework.web.bind.annotation.RestController;
    4. @RestController
    5. @RequestMapping("/p")
    6. @Slf4j
    7. public class PersonController {
    8. @RequestMapping("/log")
    9. public void loggerTest() {
    10. log.error("------------------- error -----------------");
    11. }
    12. }

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

    他就会打印出这个日志。

    总结:

    ⽇志是程序中的重要组成部分,使⽤⽇志可以快速的发现和定位问题,Spring Boot 内容了⽇志框架,默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解
    和 log 对象快速的打印⾃定义⽇志,⽇志包含 6 个级别:
    • trace:微量,少许的意思,级别最低;
    • debug:需要调试时候的关键信息打印;
    • info:普通的打印信息;
    • warn:警告,不影响使⽤,但需要注意的问题;
    • error:错误信息,级别较⾼的错误⽇志信息;
    • fatal:致命的,因为代码异常导致程序退出执⾏的事件。
    ⽇志级别依次提升,⽽⽇志界别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称或 保存⽬录来将⽇志永久地保存下来。
  • 相关阅读:
    基于WEB在线音乐工厂的设计与实现
    分析Python爬虫设计
    计算机提示vcomp120.dll丢失怎样修复,vcomp120.dll丢失的4个修复方法分享
    web.xml中Servlet中init-param的作用说明
    计算机毕业设计之java+ssm的校园旧书交易交换平台
    Layui三级联动插件使用方法
    事件中的this指向、innerText的用法与考试题讲解
    LeetCode简单题之判断两个事件是否存在冲突
    Book2Notion:将豆瓣图书信息同步到Notion的Chrome插件
    Pycharm 自定义文件和代码模板
  • 原文地址:https://blog.csdn.net/weixin_67807492/article/details/132394310