关于 spring boot 的 目录详解 和 配置文件 以及 日志

目录

配置文件

spring boot 的配置文件有两种格式,分别是 properties 和 yml(yaml)。这两种格式的配置文件是可以同时存在的,此时会以 properties 的文件为主,但一般都是使用同一种格式的。

格式

properties 语法格式:key=value

配置项的分类:1. 系统配置项,比如 server.port,这是系统规定的。2. 用户自定义配置(非系统配置项),这是程序猿自定义的。

读取配置文件:@Value("${key}")的方式。 如果不是 ${key} 的格式,那么程序会认为 key 是你想要表示的字符串,而不会根据 key 找到对应的 value。

优点
  1. 系统默认的配置文件,生成项目的时候就自带了

  2. properties 的优先级比 yml 高

  3. 易读性高,易上手,不容易出错

缺点

写法比较冗余(比如要连接数据库时 spring.datasource 一行都不能少)

yml 语法格式:key: value

跟 properties 没啥区别,语法上 yml 更加简洁,特别是配置很多的时候 yml 就显得清晰明了,易读性变得更好。

因为 yml 的这种灵活的格式,所以可以表现的数据类型也更多,比如可以表示一个对象:

读取的时候,@ConfigurationProperties("key")、@Component、@Setter 这三个注解少一个程序就运行不起来。

properties 和 yml 的对比

● properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤": "英⽂冒号加空格的⽅式设置,并且空格不可省略。
● properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题。
● yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件。
● yml ⽀持更多的数据类型。

日志

日志可以用来发现和定位报错问题。也可以记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。记录程序的执⾏时间等。

日志打印

  1. 先得到日志对象(选择 slf4j )
  1. 使用日志对象提供的方法打印日志

日志级别

日志级别 级别描述及应用场景举例
trace 微量,少许的意思,级别最低; 系统内部细微流程追踪,如函数内多次循环中每次的具体变化
debug 需要调试时候的关键信息打印; 开发中调试具体代码逻辑、变量状态等,如某段复杂算法执行细节
info 普通的打印信息(默认⽇志级别); 系统启动、重要业务流程关键节点记录,如服务成功开启
warn 警告,不影响使⽤,但需要注意的问题; 资源接近阈值、潜在的数据问题等,如缓存命中率偏低
error 错误信息,级别较⾼的错误⽇志信息; 数据处理错误、文件操作失败等,如读取文件异常
fatal 致命的,因为代码异常导致程序退出执⾏的事件; 关键资源耗尽、严重错误导致程序终止,如内存溢出导致崩溃

设置日志级别

在配置文件里面设置:

日志持久化

把⽇志保存下来的过程就叫做持久化,就是以前的信息都保留下来了。想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的 存储路径 或者是指定⽇志 保存文件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。

配置日志文件的文件名:

配置日志文件的存储路径:

当项目运行的时间足够长,生成的日志信息内存大于 10 MB 的时候,spring boot 就会自动生成一个新的日志文件(官方默认的,大小也可以自己设置)。

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

  1. 确保 添加了 lombok 框架⽀持。
  2. 使用 @slf4j 注解输出日志。
java 复制代码
package com.example.springbootdemo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // @Controller + @ResponseBody 的合体
@Slf4j // 给当前类中添加一个叫做 log 的日志对象(= SLF4J 里面提供 Logger)
public class LogController {

    @RequestMapping("/log/say")
    public String say() {
        log.info("我是 log 的 info");
        log.error("我是 log 的 error");
        return " log say ";
    }

}

使用 @slf4j 这个注解就不用写长长的 private static final Logger log = LoggerFactory.getLogger(TestController.class); 这一串了。

关于 Lombok 注解的原理:在编译的过程中,Lombok 会自动地往代码添加注解所对应的部分。

相关推荐
一只爱打拳的程序猿11 分钟前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
杨荧12 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
minDuck14 分钟前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
为将者,自当识天晓地。33 分钟前
c++多线程
java·开发语言
daqinzl41 分钟前
java获取机器ip、mac
java·mac·ip
激流丶1 小时前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin