SpringBootSpringBoot 日志配置级别持久化

Posted Perceus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBootSpringBoot 日志配置级别持久化相关的知识,希望对你有一定的参考价值。

@TOC


1. 日志的作用

日志提供的功能:

举例:


2. 日志怎么用

在我们启动 SpringBoot 项目的时候就会输出日志:


通过上述⽇志信息我们能发现以下 3 个问题:


3. 自定义日志打印

主要分两个步骤:


3.1 得到日志对象

得到日志对象 Logger ,它来自于 slf4j,不要导错了包,在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory


3.2 使用日志对象提供的方法打印日志

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class UserController 

//1. 先得到日志对象(来自 slf4j)
    private static final Logger log =
        LoggerFactory.getLogger(UserController.class); //设置当前的类型

    @RequestMapping("/sayhi")
    public void sayHi()
        //2. 使用日志对象提供的打印方法进行日志打印
        log.trace("我是 trace");
        log.debug("我是 debug");
        log.info("我是 info");
        log.warn("我是 warn");
        log.error("我是 error");

    


3.3 日志格式说明

日志具体表示什么信息呢?


4. 日志级别

反馈一些需要的日志,并不需要把所有的都打印出来


4.1 日志级别分类

日志级别分为:

日志级别的顺序:

注意:


4.2 日志级别的配置

① 全局日志级别设置

⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可:

# 设置全局的日志级别
logging.level.root=warn

# 设置局部文件夹的日志级别
logging.level.com.example.demo.UserController=trace

之前的 info 级别日志就没打印了.


② 局部日志级别设置

方法也很简单!!!


现在有一个问题:
在全局日志级别 和 局部日志级别,都被设置的情况下,哪一个的优先级最高?


5. 日志持久化

前面打印的日志,只是一闪而过!【打印完就没了!】


日志持久化(将日志永久的保存到磁盘的某个位置)

#设置日志保存的目录 写法一
logging.file.path=D:\\\\log
# 设置日志保存的目录写法二
logging.file.path=D:/log


# 设置日志的保存名称
logging.file.name=G:\\\\log\\\\spring-boot.log


但是!还存在一个问题!!!

日志文件大小超过了 10MB 的时候,会自动创建新的 日志文件

另外,是可用通过上述的方法进行设置 日志文件的大小的。


6. 更简单的实现自定义日志的打印

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


6.1 准备工作,添加 lombok 到项目中

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

6.2 使用 @Slf4j 得到日志对象

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
@Slf4j //替代了之前需要通过 LoggerFactory.getLogger 操作
public class UserController 

//1. 先得到日志对象(来自 slf4j)
//    private static final Logger log =
//        LoggerFactory.getLogger(UserController.class); //设置当前的类型

    @RequestMapping("/sayhi")
    public void sayHi()
        //2. 使用日志对象提供的打印方法进行日志打印
        log.trace("我是 trace");
        log.debug("我是 debug");
        log.info("我是 info");
        log.warn("我是 warn");
        log.error("我是 error");

    


6.3 lombok 原理解释

为什么 加上 @Slf4j,就可以省略第一步,直接得到一个 log 对象呢?

Java 程序的运⾏原理:

Lombok 的作⽤如下图所示:


6.4 lombok 更多注解说明

注解 作用
@Getter ⾃动添加 getter ⽅法
@Setter ⾃动添加 setter ⽅法
@ToString ⾃动添加 toString ⽅法
@EqualsAndHashCode ⾃动添加 equals 和 hashCode ⽅法
@NoArgsConstructor ⾃动添加⽆参构造⽅法
@AllArgsConstructor ⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull 属性不能为 null
@RequiredArgsConstructor ⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需

组合注解:

注解 作用
@Data @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor

日志注解:

注解 作⽤
@Slf4j 添加⼀个名为 log 的⽇志,使⽤ slf4j

总结:

⽇志是程序中的重要组成部分,使⽤⽇志可以快速的发现和定位问题。

Spring Boot 内容了⽇志框架。

默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的。

我们可以通过 lombok 提供的 @Slf4j 注解和 log 对象快速的打印⾃定义⽇志。

⽇志包含 6 个级别:


以上是关于SpringBootSpringBoot 日志配置级别持久化的主要内容,如果未能解决你的问题,请参考以下文章

SpringBootspringboot日志配置

SpringBootSpringBoot 日志配置级别持久化

SpringBootSpringBoot 自动配置原理

SpringBootSpringBoot配置文件及YAML简介

SpringBootSpringBoot web开发

SpringBootSpringBoot配置与单元测试