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

news2024/12/25 23:49:00

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

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:致命的,因为代码异常导致程序退出执⾏的事件。
⽇志级别依次提升,⽽⽇志界别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称或 保存⽬录来将⽇志永久地保存下来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1003296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (91)-- 算法导论8.3 4题

四、用go语言,说明如何在 O(n) 时间内,对 0 到 n 3 − 1 n^3-1 n3−1 区间内的n个整数进行排序。 文心一言: 在 O(n) 时间内对 0 到 n^3-1 区间内的 n 个整数进行排序,可以使用基数排序(Radix Sort)算法…

如何快速、高效、免费地将Excel文件转换为PDF格式?

如果你经常需要处理Excel文件,那么你一定遇到过这样的情况:你想把Excel文件分享给别人,但是对方没有安装Office软件,或者使用的版本和你不一致,导致打开时出现格式错乱、公式失效、图表显示不正常等问题。这时候&#…

USB Server助力苏美达,Ukey连接虚拟前置机

众所周知,银行的专用Ukey,和所有USB设备一样,有一个无法在虚拟机中被识别和调用的大问题。近日,苏美达集团想将银企直连的前置机程序迁移到虚拟机中时,就遇到了这个问题——大量Ukey因为无法在虚拟机中识别连接&#x…

C++——vector

作者:几冬雪来 时间:2023年9月12日 内容:C部分vector知识讲解 目录 前言: 1.vector: 1.vector的本质: 2.vector书写: vector创建空间: vector与reserve和vector和resize&a…

当promise遇上generator该如何应对?记一次工作中遇到的问题

问题背景 我们项目中有个保存功能,但是这个保存是一个异步函数,内部很多逻辑,比如说校验表单数据,获取子组件数据,数据处理,数据提交给后端获取中间值,最后保存。说明一下,我们的项…

项目经理摆脱「计划无用」的秘诀!

项目经理面临的最大挑战是项目计划执行不到位,导致项目进度严重滞后。这种情况下,尽管他们手中握有项目计划,但实际上却形同虚设,几乎无法发挥应有的作用。 许多项目经理喜欢陈述一些既定的事实,强调一些难以克服的困…

虚幻动画系统概述

本文主要整理一下高层次的概述,方便后续查阅 1.动画流程 DCC产出动画文件 -> UE动画导入 -> 动画蓝图驱动(类似unity的动画状态机) ->动画后处理蓝图驱动(例如修型骨,骨骼矫正等后期处理) 2.动…

淘宝直通车质量分怎么提高?

1、直通车关键词新质量分是什么 (1)创意质量:就是获取流量的能力,和关键词在店铺中基本数据的展现 (2)买家体验:最终的成交能力,在有相关性的前提下,可以提升创意分和体…

【C++】C++多线程库的使用

C线程库的使用 一、线程库(thread)1、线程的id类2、线程对象的构造3、thread提供的其他成员函数4、this_thread命名空间5、线程函数的参数问题 二、互斥量库(mutex)1、mutex的种类2、lock_guard和unique_locklock_guardunique_loc…

marisa-trie——一个基于高效Trie树实现的快速高效字符串压缩存储、查询匹配工具实践

在前文中,讲到了因为实际项目的需要,调研了一下当前比较好用字符串查询匹配算法,感兴趣的话可以直接看下: 《pyahocorasick——基于AC自动机的python高效字符串匹配实践》 本文的主要目的同前文相同,这里主要是介绍一…

Linux 6.6 中的 SELinux 删除了 NSA 的引用

导读Security Enhanced Linux (SELinux) 二十年来一直是主线内核的一部分,它提供了一个实现访问控制安全策略的模块,现在广泛用于增强生产 Linux 服务器和其他系统的安全性。长期接触 Linux 的人可能不知道 SELinux 源自美国国家安全局 (NSA)。但是现在 …

centos 下 Makefile 独立模块编译ko

1、安装编译内核环境包 编译需要用到kernel 源码,centos 下需先安装 kernel-devel 包,要下与自己kernel 对应版本 yum install kernel-devel 2、首先从内核或自己写的模块,发到编译环境中 注:就像我自己拷贝一个 bcache 驱动的目…

pinduoduo(商品优惠券)API接口

为了进行电商平台 的API开发,首先我们需要做下面几件事情。 1)开发者注册一个账号 2)然后为每个pinduoduo应用注册一个应用程序键(App Key) 。 3)下载pinduoduo API的SDK并掌握基本的API基础知识和调用 4&#xff…

在Ubuntu系统中安装Docker

👨 作者简介:大家好,我是Taro,前端领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录 前言一、Ubuntu是什么?二、安装Docker1.…

2023-简单点-开启防火墙后,ping显示请求超时;windows共享盘挂在不上

情景描述 树莓派 挂载 windows共享盘 之前一直可以,突然有一天不行了 ping xxxx不通了 一查,或许是服务器被同事开了防火墙,默认关闭了ping的回显 操作: 开启ping回显cmd ping通了,但是挂载还是不行, 显示 dmesg命…

Mac电脑其他文件太占内存?如何进行删除

Mac老用户都知道在我们查看Mac内存时都会发现有一条“其他文件”占比非常高,它是Mac储存空间中的“其他”数据包含不可移除的移动资源,如,Siri 语音、字体、词典、钥匙串和 CloudKit 数据库、系统无法删除缓存的文件等。这些“其他文件”无用…

故障治理:如何进行故障复盘

故障复盘的重要性无需多说,每一次故障都是宝贵的学习机会,本人接手故障复盘工作已经半年有余,从一开始的手足无措,慢慢变得游刃有余。以下内容为本人从网上查阅学习多个专家经验,并结合工作经历总结而来,仅…

敏捷开发的几个要点

敏捷开发是一种以人为核心,迭代、增量式的软件开发方法。它强调团队成员的自我管理、面对变化时的快速适应能力,以及持续的沟通和协作。 以下是敏捷开发的几个要点: 敏捷宣言:敏捷开发遵循敏捷宣言,其中包括四个价值…

冠达管理:普通股是什么?

普通股是最常见的股票类型,由一家公司发行。买家以此实际上成为该公司的部分所有者,能够享有公司的股息和收益,一起还承当出资的危险。本文将从多个角度剖析普通股,其间包含普通股的定义、普通股的权益、普通股的优缺点、普通股的…

Python是否被高估了?

作为一门简洁易用、生态蓬勃且具有高泛用性的编程语言,Python一直以来都被不少人称作“编程语言中的瑞士军刀”。 尤其随着近来AI热潮席卷全球,Python在编程语言圈中的地位也随之水涨船高,甚至一度被视作AI专用语言或大数据专用语言。 然而…