当前位置: 首页 > article >正文

Java EE 进阶:Spring Boot 日志

什么是日志?

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

日志的使用

常见的日志

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

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

System.out.println("sout打印日志");

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

打印日志 

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

private final static Logger logger= LoggerFactory.getLogger(LogController.class);

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

 

通过对象来打印日志

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是典型的门面模式

 

门面模式的定义:

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

 

门面模式的实现: 

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"配置项 

配置日志的默认级别

logging:
  level:
    root: debug

 

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

logging:
  file:
    name: logger/springboot.log

 

 

配置日志文件的分割 

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

 

日志格式的配置:

参考:Chapter 6: Layouts 

更加简单的日志打印

@slf4j注解

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依赖

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

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


http://www.kler.cn/a/588888.html

相关文章:

  • 获取pytdx行情服务器ip和port
  • Golang倒腾一款简配的具有请求排队功能的并发受限服务器
  • 如何在Linux中切换用户?
  • 从零到精通文本指令:打造个人AI助理的完整指令库(Prompt 指令实操)
  • HTML 列表:构建清晰结构的网页内容
  • 如何通过数据分析提升美容院顾客复购率
  • 设计模式之组合模式:原理、实现与应用
  • 构建智能汽车地图标准体系:自动驾驶技术的基石
  • 51单片机的工作过程
  • 有多少小于当前数字的数字 力扣1365
  • Kotlin语言基础笔记
  • coding ability 展开第三幕(滑动指针——基础篇)超详细!!!!
  • 【干货】Docker 在自动化测试和性能测试中的应用
  • Vue.js 中 class 和 style 绑定的全面解析
  • JVM的各种细节
  • visual studio code C++开发基础配置
  • 【商城实战(37)】Spring Boot配置优化:解锁高效商城开发密码
  • 谷歌推出 Gemini Robotics:让机器人像人类一样思考与行动
  • 探索ima.copilot:个人知识库搭建的AI新利器
  • 【机器学习-基础知识】统计和贝叶斯推断