SpringBoot 配置文件和日志文件

news/2024/10/18 2:35:27/

目录

一、SpringBoot配置文件

配置文件的格式

.properties配置文件格式 

.yml配置文件格式

.properties 与 .yml的区别

 配置文件的读取

.properties 与 .yml的区别

设置不同环境的配置⽂件

二、SpringBoot日志文件

日志打印的步骤

得到日志对象

方法一:使用日志工厂 LoggerFactory来得到日志对象

方法二:使用lombok可以更加高效的打印日志(推荐使用lombok)

日志级别 

⽇志级别设置

日志的持久化


一、SpringBoot配置文件

        在项目中重要的配置信息都是在配置文件配置的,如果没有配置文件的话,一个项目都不会运行起来。

        配置文件里面都包含着连接数据库的用户名和密码、第三方系统的密钥、端口号的设置以及用于发现异常错误信息的普通日志和异常日志。因此配置文件是十分重要的。

配置文件的格式

Spring Boot项目中配置文件的格式有两种:

  • application.properties
  • application.yml

        appllication.properties配置文件格式比较早,可以理解为老款的配置文件,而application.yml是一种新的配置文件。

注意properties与yml的区别:

        理论上properties与yml可以共存在一个项目中,如果当properties与 yml存在一个项目中,并且这两个都配置了相同的配置时,此时项目配置文件以properties为主 ,因为properties的优先级比yml高,但加载完properties配置文件后也会加载.yml配置文件。

.properties配置文件格式 

.properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如

注意:在.proerties配置文件中以#来添加注释

.yml配置文件格式

.yml基础语法是key: value
注意 :key 和 value 之间使⽤ 英⽂冒汗加空格 的方式组成的,其中的 空格不可省略

如果没有没有带空格的话,IDEA会自动显示字体颜色为灰色 

.yml配置信息注意:

  • 字符串默认不⽤加上单引号或者双引号
  • 单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据。
  • 双引号不会转义字符串⾥⾯的特殊字符;特殊字符会作为本身想表示的意思

.properties 与 .yml的区别

1、.properties的优先级比 .yml高。举例来说:当在这两个配置文件都配置了端口号,这两个端口号不相同时,会优先以.properties配置的为主

2、 .properties的配置文件比.yml冗余。

 配置文件的读取

这两个配置文件的数据读取方式都是一样的,使用@Value注解来读取

@Value 注解使⽤“${}”的格式读取

 读取代码如下

package com.example.demo;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component
public class TestYml {@Value("${string.hello}")private String hello;@PostConstructpublic void func(){System.out.println("配置文件读取结果:"+hello);}
}

 

@Component 在 Spring Boot 启动时候会注⼊到框架中,注⼊到框架中时会执⾏ @PostConstruct 初始化⽅法,这个时候就能读取到配置信息了。

在 yml 中配置对象

使用该注解来读取:@ConfigurationProperties

.properties 与 .yml的区别

1、.properties的优先级比 .yml高。举例来说:当在这两个配置文件都配置了端口号,这两个端口号不相同时,会优先以.properties配置的为主

2、 .properties的配置文件比.yml冗余。

3、.properties配置文件形式是key=value,而.yml配置文件是key: value。(冒号后面必须要带有一个空格)

4、yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件

5、yml对中文的兼容性很好,读取中文不会乱码,而.properties对中文的兼容性不是很友好,读取的时候大概率是乱码的

设置不同环境的配置⽂件

设置在不同的运行环境下的配置文件,主要是为了方便进行部署项目和修改配置文件。

设置不同的带有后缀名字来区分不同的配置文件

1、创建不同环境的配置⽂件:
  • application.yml      设置调用的配置文件
  • application-prod.yml    生产环境下的配置文件
  • application-dev.yml      测试环境下的配置文件

2、在application.yml里面修改要具体要调用哪一个配置文件

二、SpringBoot日志文件

在项目中,日志文件是十分重要的,它有如下功能:

1、记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解用户

2、记录项目中的报错信息

3、记录程序的执行时间 ,方便程序员来进行查看程序执行时间

总之,掌握日志的打印是一项必要的技能

日志打印的步骤

第一步:得到日志对象(Spring Boot 内置了⽇志框架,不然也输出不了⽇志

第二步:使用日志对象来打印日志

得到日志对象

方法一:使用日志工厂 LoggerFactory来得到日志对象

使用方法:将类的类型传入,方便知道日志的归属类,这样可以更好地去定位日志的问题所在。

   private static Logger logger = LoggerFactory.getLogger(SpringBootTest.class);//SpringBootTest为自己创建的类名

@RequestMapping("/hello")
@Controller
@ResponseBody
public class SpringBootTest {// 获取到日志对象private static Logger logger = LoggerFactory.getLogger(SpringBootTest.class);// 使用日志对象去打印日志对象@RequestMapping("/hi")public void saiHi(){logger.trace("trace");logger.debug("debug");logger.info("这是一个日志打印:inf0");logger.warn("warn");logger.error("error");}
}

 

 

方法二:使用lombok可以更加高效的打印日志(推荐使用lombok)

      在使用日志工厂LoggerFactory来得到日志对象,需要将每个类都要添加到其中十分麻烦,此时就可以使用lombok来获取日志对象,使用@Slf4j注解

使⽤ @Slf4j 注解,lombok 会自动提供 对象名log ,在程序中使⽤ log 对象即可输⼊⽇志,并且 只能使⽤ log 对象才能输出

1)添加 lombok依赖

<dependency>
<groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><optional>true</optional>
</dependency>

也可以在创建SpringBoot项目的时候添加lombok

2) 使用@Slf4j注解来打印日志对象

@RequestMapping("/hello")
@Controller
@ResponseBody
@Slf4j  //使用@Slf4j注解来获取日志对象
public class SpringBootTest {@RequestMapping("/hi")public void func(){ //直接拿lombok提供的log对象来打印日志log.trace("trace");log.error("error");log.warn("warn");}
}

 

 使用注解@Slf4j提供的日志对象log,这样就可以成功打印日志了

日志级别 

        当设置了不同的日志级别,我们就可以只看到相对应的日志级别,平时我们比较关注warn 和error级别,因此设置日志级别时为error和warn,这样我们就可以只看到这两个报错信息了。

        ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。

日志有如下几种:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认⽇志级别
  • warn:警告,不影响使⽤,但需要注意的问题;
  • error:错误信息,级别较⾼的错误⽇志信息

fatal:致命的,因为代码异常导致程序退出执⾏的事件。

1、级别依次由低到高:trace  --->  fatal

2、日志打印只会打印级别高于自己和自己本身的级别,级别低于自己的日志则不会打印

3、级别越高,收到的日志信息就会越来越少,比如设置了warn,则只会收到warn、error和fatal 的日志信息

⽇志级别设置

在配置文件里面设置日志级别

@RequestMapping("/hello")
@Controller
@ResponseBody
@Slf4j  //使用@Slf4j注解来获取日志对象
public class SpringBootTest {@RequestMapping("/hi")public void func(){ //直接拿lombok提供的log对象来打印日志// 配置文件里面配置了日志的隔离级别为warn,因此打印日志只会打印warn、errorlog.trace("trace");log.debug("debug");log.info("info");log.warn("warn");log.error("error");}
}

 对不同的目录设置不同的级别

 

日志的持久化

        我们在控制台看到的日志不能被永久的保留下来,当再次运行时就不能看到上一次的日志,因此需要我们希望能把日志能够永久的保留下来。

       想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后, Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了

 

此时会在该路径下保存日志文件

 

 

 


http://www.ppmy.cn/news/104003.html

相关文章

R实践——【rgplates】安装、介绍、入门

【rgplates】安装、介绍、入门 1. rgplates 安装1.1 easy way1.2 备案方法 2. rgplates 介绍3. rgplates 在线方法入门3.1 加载rgplates3.2 板块重建3.3 独立的地点坐标3.3.1 单个现存坐标点3.3.2 单个点的古坐标3.3.3 多个点的古坐标 3.4 现今的海岸线3.5 其他的重建模型3.6 在…

2023年,软件测试怎么样?

​2022年因为各种不可抗力原因&#xff0c;大厂裁员&#xff0c;失业等等频频受到关注。 不解释&#xff0c;确实存在&#xff0c;各行各业都很难&#xff0c;但是&#xff0c;说软件测试行业不吃香&#xff0c;我还真不认同&#xff08;不是为培训机构说好话&#xff0c;大环…

Linux 安装nodejs、npm、yarn、nrm(超实用)

前言&#xff1a;初衷想要本地通过dockerfile文件直接把项目打包到linux服务器&#xff0c;不用再本地加载再上传等&#xff0c;后续再贴上配置文件 一、什么是nodejs 来自官网的介绍&#xff0c;Node.js 是一个开源的跨平台 JavaScript 运行时环境。它几乎是任何类型项目的流…

Groovy学习笔记-2.Groovy相关基础信息

更多代码相关的内容可以参考&#xff1a;https://github.com/zclhit/groovy_learning/tree/main 代码结构 注释 #!注释&#xff0c;只允许出现在groovy脚本的第一行&#xff0c;通过这种注释可以方便Unix shell进行定位启动并运行 //单行注释 /* xxxxx */多行注释 /** xxxxx…

基于复旦微FMQL45T900 全国产ARM+FPGA核心板方案

XM745D 是一款基于上海复旦微电子 FMQL45T900 的全国产化 ARM 核心板。该核心板将复旦微的 FMQL45T900&#xff08;与 XILINX 的 XC7Z045-2FFG900I 兼容&#xff09;的最小系统集成在了一个 87*117mm 的 核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩展&a…

Netty实战(九)

单元测试 一、什么是单元测试二、EmbeddedChannel 概述三、 使用 EmbeddedChannel 测试 ChannelHandler3.1 测试入站消息3.2 测试出站消息 一、什么是单元测试 单元测试的基本思想是&#xff1a;以尽可能小的区块测试代码&#xff0c;并且尽可能地和其他的代码模块以及运行时的…

Java与查找算法(5):哈希查找

一、哈希查找 哈希查找&#xff0c;也称为散列查找&#xff0c;是一种基于哈希表的查找算法。哈希表是一种数据结构&#xff0c;它将键&#xff08;key&#xff09;映射到值&#xff08;value&#xff09;&#xff0c;使得查找某个键对应的值的时间复杂度为O(1)。哈希查找的过…

leetcode 2.两数相加(链表操作)

题目描述跳转到leetcode 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0…