勇士屠熊,绿军射鹿,夕阳西下,人群散尽,唯有烈火燎原势不可挡

2023-11-12

SpringBoot的日志

一、了解日志

1、什么是日志

程序运行过程中所产生的信息就是日志

当我们启动SpringBoot时,控制台打印的信息就是日志
在这里插入图片描述

2、日志的作用

  1. 发现和定位问题
  2. 记录用户的登录信息,进行大数据分析
  3. 记录系统的操作信息,方便数据的恢复和定位操作者
  4. 记录程序的执行时间,方便以后优化程序

二、自定义打印日志

1、实现步骤

  1. 获得日志对象
    注意:日志对象Logger 属于org.slf4j包下的,不要导错包
  2. 使用日志对象打印日志

Controller包中,设置一个LoggerController类

package com.example.demo.Controller;

@Controller
@ResponseBody
public class LoggerController {

    // 1. 得到日志对象
    private Logger logger = LoggerFactory.getLogger(LoggerController.class);

    // 2. 打印日志
    @RequestMapping("/logger")
    public String logger(){
        logger.trace("日志级别: trace");
        logger.debug("日志级别: degue");
        logger.info("日志级别: info");
        logger.warn("日志级别: warn");
        logger.error("日志级别: error");
        return "logger";
    }
}

启动SpringBoot,浏览器输入localhost:8080/logger
除启动SpringBoot时,打印的日志外,还打印如下日志:
(由于SpringBoot默认日志级别是 info,因此只能打印 info 及更高级别的日志)在这里插入图片描述

2、日志的格式说明

在这里插入图片描述
3、SpringBoot内置了日志框架slf4j,采用了“门面模式”

  1. 日志门面:slf4j
  2. 日志实现:logback

关于常见的日志框架:

  1. 日志框架包括日志门面、日志实现
  2. 日志门面就相当于是装修公司,日志实现相当于是工程队(实现具体的操作),日志门面仅能对应一个日志实现

三、日志级别

1、了解日志级别

日志级别就是用来进行日志的过滤

当某个目录设置了日志级别,我们只能得到此级别及更高级别的日志

在这里插入图片描述

  1. trace:级别最低
  2. debug:需要调试时候的关键信息
  3. info:普通的打印信息
  4. warn:警告信息
  5. error:错误信息
  6. fatal:灾难级的,因为代码异常导致程序退出执行的事件;系统级别,程序猿无法打印

2、配置日志级别

(1)、在SpringBoot配置文件中配置
在这里插入图片描述

logging:
  level:
    root: warn  # 设置所有目录的日志级别
    com:
      example:
        demo:
          Controller: trace   # 设置com.example.demo.Controller目录的日志级别
          DemoApplication: info # 设置com.example.demo.DemoApplication的日志级别
  1. 同时设置全局的日志级别和指定目录的日志级别,指定目录的日志级别为前者
  2. 需要注意的是:必须从根目录(com包)开始,一步一步的到指定目录;如下设置日志级别,没用
logging:
  level:
    demo:
      Controller: trace   # 设置com.example.demo.Controller目录的日志级别

(2)、启动SpringBoot,浏览器输入localhost:8080/logger
在这里插入图片描述

四、日志持久化

日志持久化:将控制台打印的日志写到相应的目录或文件下

logging:
  file:
    path: D:         # 设置日志文件的目录,系统自动命名 spring.log
    name: D:Springlogging.log     # 设置日志文件的文件名

如果日志的内容过大,超过日志文件的容量,系统自动设置另一个日志文件保存

将controller包下的error级别以上的日志保存到log_all.log下,将service下warn级别以上的日志保存到log_all.log下

logging:
  level:
    com:
      example:
        demo:
          controller: error
          service: warn
  file:
    name: D:log_all.log

五、使用lombok进行日志输出

1、步骤

  1. 添加 lombok 框架
  2. 使用 @Slf4j 注解输出日志

(1)、添加lombok框架,在创建SpringBoot项目时,引入即可

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

(2)、添加 @Slf4j 注解,使用log日志对象,即使log标红,没关系,照样运行项目

在Controller包中,创建一个LoggerSlf类,此时日志级别默认是 info

package com.example.demo.Controller;

@Controller
@ResponseBody
@Slf4j
public class LoggerSlf {

    @RequestMapping("/loggerSlf")
    public String logger(){
        log.trace("日志级别: trace");
        log.debug("日志级别: degue");
        log.info("日志级别: info");
        log.warn("日志级别: warn");
        log.error("日志级别: error");
        return "logger";
    }
}

启动SpringBoot,在浏览器输入localhost:8080/loggerSlf
在这里插入图片描述

2、lombok的原理

lombok的原理:lombok通过遵循Java编译器增强的规范,实现了Java源代码在生成字节码的时候功能的增强
@Slf4j注解的作用:IDEA编译源代码的时候,根据注解声明,在字节码文件中自动添加了一段 创建日志对象 的代码
在这里插入图片描述

对比 .java源文件 和程序运行后出现的 targe目录 下的 .class文件 ,发现 .class 文件 较 .java源文件 少了一个@Slf4j 注解,多了一段创建名为 log 的日志对象 的代码
在这里插入图片描述

3、关于lombok的更多注解

@Data

@Getter + @Setter + @ToString + @EqualsAndHashCode + @NoArgsConstructor + @RequiredArgsConstructor

@Getter

自动添加getter方法

@Setter

自动添加setter方法

@ToString

自动添加toString方法

@EqualsAndHashCode

自动添加equals和hashCode方法

@NoArgsConstructor

自动添加无参构造方法

@AllArgsConstructor

自动添加全属性的构造方法,顺序按照属性定义的顺序

@RequiredArgsConstructor

自动添加 必需属性的构造方法,final+@NonNull的属性为必需

@NonNull

属性不能为空

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

勇士屠熊,绿军射鹿,夕阳西下,人群散尽,唯有烈火燎原势不可挡 的相关文章

随机推荐

  • Linux 解决vi键盘方向键出现字母的问题

    修改 etc vim vimrc tiny 1 将 set compatible 兼容模式 改成 set nocompatible 非兼容模式 2 添加 set backspace 2 解决退格键无法使用
  • 【完全开源】小安派-Cam-D 摄像头核心板

    文章目录 一 概述 二 系统框图 三 摄像头电路 四 内存卡电路 五 IO引脚说明 六 资料 一 概述 小安派 Cam D AiPi Cam D 是安信可科技为高性能模组Ai M61 32S设计的一款摄像头核心板 引脚完全兼容Ai WB1
  • MFC :CCoolBar 的替代方案 CDockablePane。

    阅读受众需有一定MFC知识储备 技术支持 http www cnblogs com shuhaoc archive 2011 06 26 cdockableform html 在以往很多使用CCoolBar实现窗口停靠功能 但是在VS201
  • 【C++】Modbus通讯

    C Modbus通讯 2016年06月22日 20 37 48 Taily老段 阅读数 10298 版权声明 本文为博主原创文章 未经博主允许不得转载 如遇到疑问 评论会给出答复 学习交流 关注页面微信公众号 吃良心 拉思想 https b
  • R语言入门教程知识 第七章 特殊值

    以下为本章所用代码 letters letters 5 9 LETTERS LETTERS 6 10 month name month name 7 11 month abb month abb 8 12 pi NA length vec
  • 手撕self-attention代码_从0实现self-attention_附学习路线

    一 前言 科研需要 前几天自学了transformer 在理解self attention时 发现网上并没有一套成熟易懂的学习路线 对新手及其不友好 大多数教程只重视理论和公式的讲解 没有从零开始的代码实战 因此 我在这里整理了一条最适合新
  • python爬虫实战之最简单的网页爬虫教程

    在我们日常上网浏览网页的时候 经常会看到一些好看的图片 我们就希望把这些图片保存下载 或者用户用来做桌面壁纸 或者用来做设计的素材 下面这篇文章就来给大家介绍了关于利用python实现最简单的网页爬虫的相关资料 前言 网络爬虫 又被称为网页
  • 十--nodejs原理(事件循环)

    一 事件循环 什么是事件循环 事件循环使得nodejs可以通过将操作转移到系统内核中来执行非阻塞I O操作 尽管javascripts是单线程的 由于大多数现代内核是多线程的 因此它们可以处理在后台执行的多个操作 当这些操作之一完成时 内核
  • 最短路问题(各种方法整理)附上一个完美模板

    最短路问题 short path problem 从某点出发到达另一点所经过的路径权值相加最小的一条路径 就是最短路径 经典的也是最容易掌握的方法Floyd Dijkstra两种算法 1 Floyd算法 Floyd算法可以求解的是任意两点的
  • 快速上手 ChatGPT 进行信息检索或代码构建 (最近爆火的对话语言模型)

    文章目录 上手使用几步骤 ChatGPT 是什么 ChatGPT 能做什么 给予算法和技术学习参考 进行通用事项细节了解 国际化搜索且经过优化 实战 ChatGPT 汽车概论的论文 python快速排序 什么是分治思想 注意这里产生了上下文
  • 某系统异常流量安全分析案例

    异常分析原理 正常的基于TCP的网络流量 都是先建立TCP连接 再传输数据 然后断开连接 而网络中经常存在中毒系统 配置错误等问题 导致网络中存在单向请求现象 这些信息也会在网络流量中体现 NetInside自动发现大量连接请求 但对方没有
  • YACC工具ParserGenerator的下载和配置过程

    工具准备 parser generator http www bumblebeesoftware com downloads htm VC6 0 网上到处都是 1 parser generator的环境设置 安装好parser genera
  • RedisTemplate存储对象乱码解决

    SpringBoot 通过RedisTemplate存储对象时 key和Value乱码 特此记录 解决方法 import org springframework beans factory annotation Autowired impo
  • 深入浅出PID控制算法(二)————PID算法离散化和增量式PID算法原理及Matlab实现

    引言 上篇介绍了连续系统的PID算法 但是计算机控制是一种采样控制 他只能根据采样时刻的偏差来计算控制量 因此计算机控制系统中 必须对公式进行离散化 具体就是用求和代替积分 用向后差分来代替微分 使模拟PID离散化为数字形式的差分方程 准备
  • Java动态代理一——动态类Proxy的使用

    1 什么是动态代理 答 动态代理可以提供对另一个对象的访问 同时隐藏实际对象的具体事实 代理一般会实现它所表示的实际对象的接口 代理可以访问实际对象 但是延迟实现实际对象的部分功能 实际对象实现系统的实际功能 代理对象对客户隐藏了实际对象
  • CSS选择器总结

    元素选择器 作用 通过元素选择器可以选择页面中的所有元素 语法 标签名 如下 选中所有的P标签 p color red font size 40px ID选择器 作用 通过元素ID属性值选中唯一的一个元素 语法 id属性值 如下 选中ID为
  • 数据结构(2.1)——时间复杂度和空间复杂度计算

    前言 1 因为上一篇博客 数据结构 2 算法对于时间复杂度和空间复杂度计算的讲解太少 所以我在次增加多个案例讲解 2 上一篇已经详细介绍了 为什么我们的算法要使用复杂度这一个概念 因此 我这一篇将重点介绍 复杂度如何进行计算 时间复杂度计算
  • 使用ulisesbocchio对spring-boot项目properties配置文件信息加密

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Spring boot项目中properties文件中的密码明文不太安全 所以想到给明文加密 了解了一下 有一个依赖工具可以实现这个功能 Ulisesbocchio插件 1
  • 【机器学习】使用scikit-learn实现多元线性回归(10min阅读时长)

    Multiple Linear Regression 多元线性回归 之前有一篇简单线性回归的文章 大家感兴趣可以看看 使用scikit learn实现简单线性回归 Objectives 目标 看完这篇文章 将会 1 使用scikit lea
  • 勇士屠熊,绿军射鹿,夕阳西下,人群散尽,唯有烈火燎原势不可挡

    SpringBoot的日志 一 了解日志 1 什么是日志 2 日志的作用 二 自定义打印日志 1 实现步骤 2 日志的格式说明 三 日志级别 1 了解日志级别 2 配置日志级别 四 日志持久化 五 使用lombok进行日志输出 1 步骤 2