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>

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

相关推荐
weixin_BYSJ198710 分钟前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
栋***t15 分钟前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构
CHANG_THE_WORLD23 分钟前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
xexpertS25 分钟前
CI/CD 熔断机制:如何通过编排级熔断器提升开发者效率
java·linux·运维
zy happy1 小时前
VMware虚拟机添加新的硬盘
java·linux·jvm·docker
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列
meng半颗糖1 小时前
3.Java流程控制语句
java·开发语言·intellij-idea
大模型码小白2 小时前
企业级检索增强后端集成:Java 服务如何管理知识库版本
java·服务器·开发语言·人工智能·python·microsoft
用户6169182299932 小时前
记录一次死锁检测
java
jvmind_dev2 小时前
1c1g 容器莫名 OOM Killed?排查 Metaspace 持续增长与脚本引擎的坑
java·后端