Java EE 进阶:Spring Boot 日志

什么是日志?

日志就是在程序运行的时候记录运行过程中的各种信息,比如系统的运行状态,用户操作,错误信息,调试数据等,就跟你写日记一样,记录各种数据。

日志的使用

常见的日志

Spring Boot在创建时就会记录各种的数据

在以前我们的学习中,我们可以通过sout来打印日志

java 复制代码
System.out.println("sout打印日志");

我们可以发现,我们写的日志,比Spring Boot生成的日志少了很多的信息。

打印日志

我们可以通过如下代码来打印日志

java 复制代码
private final static Logger logger= LoggerFactory.getLogger(LogController.class);

注:logger是属于slf4j包中,切记不要导错包

通过对象来打印日志

java 复制代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/log")
@RestController
public class LogController {
    private final static Logger logger= L

    @RequestMapping("/print")
    public void print(){
        System.out.println("sout打印日志");
        logger.debug("debug 打印日志");
        logger.info("info 打印日志");
        logger.trace("trace 打印日志");
        logger.error("error 打印日志");
        logger.warn("warn 打印日志");
    }
}

但是我们发现我们打印了六种日志,但实际出来的只有三种

这与⽇志级别的配置有关, ⽇志的输出级别默认是info级别,所以只会打印⼤于等于此级别的⽇志,也就 是info, warn和error

门面模式

slf4j是典型的门面模式

门面模式的定义:

提供了一个统一接口,用来访问子系统中的一群接口

门面模式的实现:

java 复制代码
public interface Light {
    void open();

    void close();
}

public class LivingRoomLight implements Light{
    @Override
    public void open() {
        System.out.println("打开客厅灯");
    }

    @Override
    public void close() {
        System.out.println("关闭客厅灯");
    }
}

public class BedRoomLight implements Light{
    @Override
    public void open() {
        System.out.println("打开卧室灯");
    }

    @Override
    public void close() {
        System.out.println("关闭卧室灯");
    }
}

public class BathRoomLight implements Light{
    @Override
    public void open() {
        System.out.println("打开浴室灯");
    }

    @Override
    public void close() {
        System.out.println("关闭浴室灯");
    }
}

public class FacadeClient {
    private BathRoomLight bathRoomLight=new BathRoomLight();
    private BedRoomLight bedRoomLight=new BedRoomLight();
    private LivingRoomLight livingRoomLight=new LivingRoomLight();



    public void open() {
        bathRoomLight.open();
        bedRoomLight.open();
        livingRoomLight.open();
    }


    public void close() {
        bathRoomLight.close();
        bedRoomLight.close();
        livingRoomLight.close();
    }
}

public class Main {
    public static void main(String[] args) {
        FacadeClient facadeClient=new FacadeClient();
        facadeClient.open();
        facadeClient.close();
    }
}

⻔⾯模式的优点:

减少了依赖性,提高灵活性,提高了安全性,灵活的设定权限的访问,不在门面对象中开通方法,就无法访问。

日志格式的说明

日志级别的分类

⽇志的级别从⾼到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE

FATAL:致命信息,表⽰需要⽴即被处理的系统级错误

ERROR:错误信息,级别较⾼的错误⽇志信息,但仍然不影响系统的继续运⾏

WARN:警告信息,不影响使⽤,但需要注意的问题

INFO:普通信息,⽤于记录应⽤程序正常运⾏时的⼀些信息,例如系统启动完成、请求处理完成等

DEBUG:调试信息,需要调试时候的关键信息打印

TRACE:追踪信息,⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)

日志的配置

在配置文件中设置"logging.level"配置项

配置日志的默认级别

java 复制代码
logging:
  level:
    root: debug

配置⽇志⽂件的路径和⽂件名:

java 复制代码
logging:
  file:
    name: logger/springboot.log

配置日志文件的分割

java 复制代码
Logging  
  logback:
    rollingpolicy:
     file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
     max-file-size: 1KB

日志格式的配置:

参考:Chapter 6: Layouts

更加简单的日志打印

@slf4j注解

java 复制代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/log2")
@RestController
@Slf4j
public class LogController2 {

    @RequestMapping("/print2")
    public void print2(){
        System.out.println("sout打印日志");
        log.debug("debug 打印日志");
        log.info("info 打印日志");
        log.trace("trace 打印日志");
        log.error("error 打印日志");
        log.warn("warn 打印日志");
    }
}

注:记得添加lombok依赖

java 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version> <!-- 建议使用较新的版本 -->
    <scope>provided</scope>
</dependency>

希望能对大家有所帮助!!!!

相关推荐
海边的Kurisu4 小时前
苍穹外卖日记 | Day1 苍穹外卖概述、开发环境搭建、接口文档
java
C雨后彩虹7 小时前
任务最优调度
java·数据结构·算法·华为·面试
heartbeat..7 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
Jing_jing_X7 小时前
AI分析不同阶层思维 二:Spring 的事务在什么情况下会失效?
java·spring·架构·提升·薪资
元Y亨H9 小时前
Nacos - 服务发现
java·微服务
微露清风9 小时前
系统性学习C++-第十八讲-封装红黑树实现myset与mymap
java·c++·学习
dasi02279 小时前
Java趣闻
java
阿波罗尼亚10 小时前
Tcp SSE Utils
android·java·tcp/ip
susu108301891110 小时前
springboot3.5.8整合minio8.5.9
java·springboot
不知道累,只知道类10 小时前
深入理解 Java 虚拟线程 (Project Loom)
java·开发语言