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

SpringBoot 日志

目录

1.如何使用日志

2.自定义打印日志

3.日志级别

3.1 日志从低到高级别

3.2 日志级别设置

为什么 Spring Boot 可以打印日志?并设置日志级别?

4.日志的持久化

5.lombok——更加简单的输出日志

5.1 使用@slf4j 注解输出日志

5.2 lombok 执行原理


日志是程序的重要部分,想象⼀下,如果程序报错了,不让你打开控制台看日志,那么你能找到报错的原因吗?

日志的功能:

  • 记录用户登录日志,⽅便分析⽤户是正常登录还是恶意破解⽤户
  • 记录系统的操作日志,⽅便数据恢复和定位操作人
  • 记录程序的执行时间,⽅便为以后优化程序提供数据⽀持等等

1.如何使用日志

spring boot 默认打印日志:

2.自定义打印日志

  1. 通过日志工厂得到日志对象
  2. 通过日志对象提供打印方法实现打印

1️⃣在程序中得到日志对象

在程序中获取日志对象需要使用日志工厂 LoggerFactory注意:Logger 对象是属于 org.slf4j 包下的,不要导⼊错包)

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

面试问题:spring或者项目中有没有使用到设计模式?即像如 LoggerFactory 是一个工厂模式;BeanFactory也是工厂模式

2️⃣使用日志对象打印日志

//2.使用日志对象提供 API 打印日志
String msg = "学习 springboot";
log.trace("trace -> " + msg);
log.info("info -> " + msg);
log.debug("debug -> " + msg);
log.warn("warn -> " + msg);
log.error("error -> " + msg);

3.日志级别

  • 日志的作用

筛选重要信息比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间

3.1 日志从低到高级别

  • trace:微量、少许、痕迹,日志级别最低
  • debug:调试日志级别(需要调试时候的关键信息打印
  • info:普通(默认)日志级别(普通的打印信息
  • warn:警告日志级别(不影响使⽤,但需要注意的问题
  • error:错误日志级别
  • fatal:致命的日志级别(因为代码异常导致程序退出执行的事件,级别最高

3.2 日志级别设置

日志级别配置只需要在配置文件中设置“logging.level”配置项即可:

logging.level.root=warn

此时只可以看到大于等于 warn 日志级别的日志

从这里可以看出:日志级别的作用——过滤信息,将业务不需要的日志屏蔽掉


为什么 Spring Boot 可以打印日志?并设置日志级别?

因为 Spring Boot 内置了两个日志框架:SLF4J + LogBack

LogBack:最底层实现日志相关操作的框架

SLF4J:让开发者使用和调用的框架

给文件夹单独设置日志级别:

# 当前项目默认的日志级别
logging.level.root=warn
# 给 Controller 文件夹单独设置日志级别
logging.level.com.example.demo.controller=debug

4.日志的持久化

简化:将日志保存到磁盘

  • 设置日志保存路径
#设置日志保存路径
logging.file.path=E:\\springboot_log\\
  • 设置日志保存文件名
#设置日志的保存文件名
logging.file.name=E:\\springboot_log\\springboot.log

5.lombok——更加简单的输出日志

之前使用 LoggerFactory.getLogger(xxx.class) 比较繁琐

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

接下来说说更加简单的输出日志

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

1️⃣idea 安装 lombok 插件

2️⃣在项目中添加 lombok 依赖

3️⃣使用 lombok 的方式编写代码

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;@Getter
@Setter //相当于调用 get 和 set 方法
@ToString
public class Student {private int id;private String name;private String password;public static void main(String[] args) {Student student = new Student();student.setId(1);student.setName("张三");student.setPassword("123456");System.out.println(student.toString());}
}

5.1 使用@slf4j 注解输出日志

@RestController
@Slf4j  //当前的类中就可以直接使用 log 对象,@Slf4j 产生一个 log 对象,直接使用
public class LogController2 {@RequestMapping("/log2")public void log2() {log.trace("trace log2");log.debug("debug log2");log.info("info log2");log.warn("warn log2");log.error("error log2");}}

lombok 能够打印日志的密码就在 target 目录里面,target 为项目最终执行代码:

这个时候 @Slf4j 相当于生成一个 log对象

5.2 lombok 执行原理

Lombok 执行原理通过编译生成代码的时候进行翻译

上述代码进行编译,在 target 下边生成字节码,idea 会将字节码反编译成代码展示出来

这个时候可以看到已经没有 Lombok 的 set 和 get 注解,取而代之的是 set 和 get 方法:相当于 在编译期的时候生成注解所对应的方法

http://www.lryc.cn/news/207526.html

相关文章:

  • 非小米笔记本小米妙享中心安装最新教程 3.2.0.464 兼容所有Windows系统
  • 基于大数据的社交平台数据爬虫舆情分析可视化系统 计算机竞赛
  • MYSQL(事务)
  • npm start启动的是什么
  • 基于PyTorch的MNIST手写体分类实战
  • conda 复制系统环境
  • 如何在Microsoft Visual Studio 中使用Cpp代码调用python代码
  • DAY35 435. 无重叠区间 + 763.划分字母区间 + 56. 合并区间
  • 代码随想录算法训练营第2天| 977有序数组的平方、209长度最小的子数组。
  • 微信小程序通过startLocationUpdate,onLocationChange获取当前地理位置信息,配合腾讯地图解析获取到地址
  • C/C++字符三角形 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
  • Python数据挖掘:入门、进阶与实用案例分析——基于非侵入式负荷检测与分解的电力数据挖掘
  • 基于 Qt控制开发板 LED和C语言控制LED渐变亮度效果
  • Android 11.0 禁用插入耳机时弹出的保护听力对话框
  • 微信小程序案例2-3:婚礼邀请函
  • K8S部署Dashboard
  • 【OJ比赛日历】快周末了,不来一场比赛吗? #10.29-11.04 #7场
  • 常用应用安装教程---在centos7系统上安装Docker
  • CTFHub-SSRF-读取伪协议
  • 推荐一款适合科技行业的CRM系统
  • ChatGPT 与 Python Echarts 完成热力图实例
  • vue3项目报错The template root requires exactly one element.eslint-plugin-vue
  • 【C++系列】STL容器——vector类的例题应用(12)
  • 常用应用安装教程---在centos7系统上安装JDK8
  • 阿里云/腾讯云国际站代理:国际腾讯云的优势
  • 【软件教程】如何用C++检查TCP或UDP端口是否被占用
  • Flutter报错RenderBox was not laid out: RenderRepaintBoundary的解决方法
  • 0基础学习PyFlink——用户自定义函数之UDAF
  • MVC架构_Qt自己的MV架构
  • CentOS - 安装 Elasticsearch