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>

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

相关推荐
有梦想的攻城狮34 分钟前
maven中的maven-antrun-plugin插件详解
java·maven·插件·antrun
硅的褶皱4 小时前
对比分析LinkedBlockingQueue和SynchronousQueue
java·并发编程
MoFe14 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
季鸢5 小时前
Java设计模式之观察者模式详解
java·观察者模式·设计模式
Fanxt_Ja5 小时前
【JVM】三色标记法原理
java·开发语言·jvm·算法
Mr Aokey6 小时前
Spring MVC参数绑定终极手册:单&多参/对象/集合/JSON/文件上传精讲
java·后端·spring
14L6 小时前
互联网大厂Java面试:从Spring Cloud到Kafka的技术考察
spring boot·redis·spring cloud·kafka·jwt·oauth2·java面试
小马爱记录6 小时前
sentinel规则持久化
java·spring cloud·sentinel
地藏Kelvin6 小时前
Spring Ai 从Demo到搭建套壳项目(二)实现deepseek+MCP client让高德生成昆明游玩4天攻略
人工智能·spring boot·后端
一个有女朋友的程序员6 小时前
Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)
spring boot·redis·缓存