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

SpringBoot 日志 与 门面模式(外观模式)

日志的使用

先引入日志对象,注意是 引入的是 org.slf4j 这个包下的 Logger

在这里插入图片描述


在传参上:可以传入类名,或者一个字符串,该参数表示日志名称

例如如果传入 “aaaa”,那么日志的名称就是 aaaa

@RequestMapping("/log")
@RestController
public class LogController {
    private final static Logger logger = LoggerFactory.getLogger("aaaa");

    @RequestMapping("/print")
    public void print() {
        logger.debug("logger debug");
        logger.info("logger info");
        logger.error("logger error");
        logger.trace("logger trace");
        logger.warn("logger warn");
    }
}

在这里插入图片描述

如果传入类名,日志的名称为全限定名(包名 + 类名)

package org.example.springcaptcha.log.controller;

@RequestMapping("/log")
@RestController
public class LogController {
    private final static Logger logger = LoggerFactory.getLogger(LogController.class);

    @RequestMapping("/print")
    public void print() {
        logger.debug("logger debug");
        logger.info("logger info");
        logger.error("logger error");
        logger.trace("logger trace");
        logger.warn("logger warn");
    }
}

在这里插入图片描述

日志的等级

在运行上述代码后并访问之后,我们获得如下的访问内容:

在这里插入图片描述

你会发现这个日志只打印了三条,因为日志默认打印的起始等级为 info

日志的级别从高到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE
• FATAL: 致命信息,表示需要立即被处理的系统级错误.
• ERROR: 错误信息, 级别较高的错误日志信息, 但仍然不影响系统的继续运行.
• WARN: 警告信息, 不影响使用, 但需要注意的问题
• INFO: 普通信息,用于记录应用程序正常运行时的⼀些信息, 例如系统启动完成、请求处理完成等.
• DEBUG: 调试信息, 需要调试时候的关键信息打印.
• TRACE: 追踪信息, 比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使用DEBUG级别替代)

在这里插入图片描述

FATAL 在这里没有方法提供给我们使用
默认的的打印等级最低为 info


如何设置默认的打印等级:
使用配置文件来进行修改:

示例: yml 格式

logging:
  level:
    root: debug

properties 格式:

logging.level.root=debug

在这里插入图片描述

SLF4J 框架介绍

SLF4J 是其他日志框架的门面,SLF4J 可以理解为是提供日志服务的统一 API 接口,并不涉及到具体日志逻辑实现

在这里插入图片描述

不引入日志门面的话存在哪些问题:
1.不同的日志框架提供的 API 接口和配置文件不同,如果多个日志框架并存,那么不得不维护多套配置文件(该配置文件指用户自定义的配置文件)
2. 如果要更换日志框架,应用程序不得不修改代码,并且修改过程中可能会存在一些代码冲突
3. 如果引入的第三方框架,使用了多套,那就不得不维护多套配置

引入日志门面之后
应用程序和日志框架之间有了统一的API 接口,此时应用程序只需要维护一套日志文件的配置,且当底层实现框架改变的时候,也不需要更改应用程序的代码

门面模式(外观模式)

门面模式又被称为外观模式,提供了统一的接口,用来访问子系统
其主要的特征为定义了一个高层接口,让子系统更容易使用

门面模式的优点:
减少了系统的相互依赖,实现了客户端与子系统的耦合关系,这使得子系统的变化不会影响到它调用的客户端
提高了灵活性,简化了客户端对子系统的使用难度,客户端无需关心子系统的具体实现方式,而只需要与门面对象交互即可
提高了安全性,可以灵活设定访问权限,不在门面对象中开通方法,就无法访问

示例:通过门面统一控制灯的开与关

子系统实现:

public interface Light {
    void on();

    void off();
}

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

    @Override
    public void off() {
        System.out.println("卧室灯灭");
    }
}

public class HallLight implements Light {
    @Override
    public void on() {
        System.out.println("走廊灯亮");
    }

    @Override
    public void off() {
        System.out.println("走廊灯灭");
    }
}

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

    @Override
    public void off() {
        System.out.println("客厅灯灭");
    }
}

门面实现:

public class FacadeCilent {
    BedRoomLight bedRoomLight = new BedRoomLight();
    HallLight hallLight = new HallLight();
    LivingRoomLight livingRoomLight = new LivingRoomLight();

    public void on() {
        bedRoomLight.on();
        hallLight.on();
        livingRoomLight.on();
    }

    public void off() {
        bedRoomLight.off();
        hallLight.off();
        livingRoomLight.off();
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        FacadeCilent facadeCilent = new FacadeCilent();
        facadeCilent.off();
        facadeCilent.on();
    }
}

日志格式说明

在这里插入图片描述
在这里插入图片描述

日志的持久化保存

我们依旧要使用配置文件来定义日志保存的路径或者文件夹,以及日志的分割等信息

配置日志的保存的文件夹:
yml:

logging:
  file:
    name: logger/springboot.log

properties:

logging.file.name=logger/springboot.log

创建好 logger 文件夹之后并且将文件 springboot.log 也创建出来了:
在这里插入图片描述


配置日志保存的路径:
yml:

logging:
  file:
    path: D:/code

properties:

logging.file.path=D:/code

会在指定的路径下生成 spring.log 文件

在这里插入图片描述

当logging.file.name 和 logging.file.path 两个配置都存在的情况下,只能生效其中一个,以 logging.file.name 为准


日志的分割:
我们可以通过配置文件来定义多大空间的日志就进行一次分割

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

max-file-size 设置日志文件的最大值
file-name-pattern 设置日志文件的文件名称格式

在这里插入图片描述

日志的简单使用

使用 lombok 下 的 注解:@Slf4j

我们可以直接使用变量 log 来进行日志的打印:

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

    @RequestMapping("/print")
    public void print() {
        log.debug("logger debug");
        log.info("logger info");
        log.error("logger error");
        log.trace("logger trace");
        log.warn("logger warn");
    }
}

我们可以在 target 文件夹下观察到 @Slf4j 直接消失,多出来一个 Logger 对象,并且对象名为 log
因此我们可以直接使用 log 来进行日志的打印

在这里插入图片描述

相关文章:

  • Anaconda安装(2024最新版)
  • Iceberg Catalog
  • AWS中使用CloudFront分发API Gateway
  • 自学微信小程序的第六天
  • 如何评估所选择的PHP后端框架的性能?
  • 【设计模式】单例模式|饿汉模式|懒汉模式|指令重排序
  • DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順
  • golang 内存对齐和填充规则
  • 【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
  • uvm中的run_test作用
  • C语言基础要素(007):使用变量
  • 自然语言处理NLP入门 -- 第十节NLP 实战项目 2: 简单的聊天机器人
  • uniapp 系统学习,从入门到实战(六)—— 样式与布局
  • [思考记录]AI时代下,悄然的改变
  • 大白话前端性能优化方法的分类与具体实现
  • Python 科学计算生态入门 2 - NumPy 基础与示例
  • Numpy基础知识
  • Highcharts 配置语法详解
  • redis repl_backlog_first_byte_offset 这个字段的作用
  • 安装 Windows Docker Desktop - WSL问题
  • 服务企业是什么/河源市seo点击排名软件价格
  • 途牛网站建设/优化的概念
  • 琼海商城网站建设/南京百度推广优化
  • 放单网站建设/360优化大师官方最新
  • 导入表格做地图中热力网站/软文发布
  • 动漫网站开发与建设/搜索引擎优化的含义和目标