SpringBoot深入了解日志的使用
作者:粉色的志明 发布时间:2023-01-06 15:40:34
1. 日志的作用
日志是程序的重要组成部分,在程序报错的时候,如果我们不看日志,是很难排查出错误的,除非你真的是很有经验.所以日志最主要的作用就是排除和定位问题.
日志提供的功能:
记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持
2. 日志怎么用
在我们启动 SpringBoot 项目的时候就会输出日志:
3. 自定义日志打印
主要分两个步骤:
在一个类中先获得打印日志对象(日志框架提供的日志对象,而日志框架默认已经集成到 SpringBoot 里了)使用日志对象提供的方法实现日志的打印
3.1 得到日志对象
得到日志对象 Logger ,它来自于 slf4j,不要导错了包,在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory
3.2 使用日志对象提供的方法打印日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
public class UserController {
//1. 先得到日志对象(来自 slf4j)
private static final Logger log =
LoggerFactory.getLogger(UserController.class); //设置当前的类型
@RequestMapping("/sayhi")
public void sayHi(){
//2. 使用日志对象提供的打印方法进行日志打印
log.trace("我是 trace");
log.debug("我是 debug");
log.info("我是 info");
log.warn("我是 warn");
log.error("我是 error");
}
}
有些没打印,因为他只会打印跟他同级别的或者比他级别高的日志,他这里默认是 info 级别.
3.3 日志格式说明
4. 日志级别
反馈一些需要的日志,并不需要把所有的都打印出来
就像是如果你是一家 2 万人的公司的老板,需要每天看他们的反馈信息,难道每个人都看吗?这显然看不完,你只需要看一些领头的就行…
4.1 日志级别分类
日志级别分为:
trace
: 微量,少许的意思(级别最低)debug
: 调试日志info
: 普通信息日志warn
: 警告日志error
: 错误日志fatal
: 致命的日志(系统输出的日志,不能自定义打印)
日志级别的顺序:
越往上接收到的消息就越少。
4.2 日志级别的配置
⽇志级别配置只需要在配置⽂件中设置“logging.level”
配置项即可:
# 设置全局的日志级别
logging.level.root=warn
# 设置局部文件夹的日志级别
logging.level.com.example.demo.UserController=trace
之前的 info 级别日志就没打印了.
注意:当存在局部日志级别和全局的日志级别设置时,那么当访问局部日志时,使用的是局部日志级别.也就是 局部日志优先级 > 全局日志级别
5. 日志持久化
以上的⽇志都是输出在控制台上的,然⽽在⽣产环境上咱们需要将⽇志保存下来,以便出现问题之后追溯问题,把⽇志保存下来的过程就叫做持久化。
日志持久化(将日志永久的保存到磁盘的某个位置)
1:在配置文件中设置日志保存的路径,当设置了保存路劲之后,那么日志就会自动进行持久化
2:在配置文件中设置日志保存的名称,日志会自动进行持久化
#设置日志保存的目录写法一
logging.file.path=D:\\log
#设置日志保存的目录写法二
logging.file.path=D:/log
打开这个文件:
# 设置日志的保存名称
logging.file.name=D:\\log\\spring-boot.log
6. 更简单的实现自定义日志的打印
6.1 准备工作,添加 lombok 到项目中
如果你当初没有添加 lombok 又不想重开项目,有这样一种办法,下载插件 EditStarters:
6.2 使用 @Slf4j 得到日志对象
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
@Slf4j //替代了之前需要通过 LoggerFactory.getLogger 操作
public class UserController {
//1. 先得到日志对象(来自 slf4j)
// private static final Logger log =
// LoggerFactory.getLogger(UserController.class); //设置当前的类型
@RequestMapping("/sayhi")
public void sayHi(){
//2. 使用日志对象提供的打印方法进行日志打印
log.trace("我是 trace");
log.debug("我是 debug");
log.info("我是 info");
log.warn("我是 warn");
log.error("我是 error");
}
}
6.3 使用 log 对象自定义打印日志
看.class
文件,他是给我们转换了的:
Java 程序的运⾏原理:
Lombok 的作⽤如下图所示:
6.4 lombok 更多注解说明
注解 | 作用 |
---|---|
@Getter | ⾃动添加 getter ⽅法 |
@Setter | ⾃动添加 setter ⽅法 |
@ToString | ⾃动添加 toString ⽅法 |
@EqualsAndHashCode | ⾃动添加 equals 和 hashCode ⽅法 |
@NoArgsConstructor | ⾃动添加⽆参构造⽅法 |
@AllArgsConstructor | ⾃动添加全属性构造⽅法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为 null |
@RequiredArgsConstructor | ⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需 |
组合注解:
注解 | 作用 |
---|---|
@Data | @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor |
日志注解:
注解 | 作⽤ |
---|---|
@Slf4j | 添加⼀个名为 log 的⽇志,使⽤ slf4j |
来源:https://blog.csdn.net/chenbaifan/article/details/125742336
猜你喜欢
- 消息都是存放在一个消息队列中去,而消息循环线程就是围绕这个消息队列进入一个无限循环的,直到线程退出。如果队列中有消息,消息循环线程就会把它取
- 假定存在这样一种情况多个用户对数据库进行写,我们的业务逻辑规定,每个用户只能写一次,大部分用户也只发一次请求。public void wri
- 一、template下文件不允许直接访问1、查资料得知:springboot项目默认是不允许直接访问template下的文件的,是受保护的。
- 1. Spring Boot 入门 Spring Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spri
- 一本书的页码从自然数1开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如第6页用6表示而不是06或0
- 前言先放一个官网吧,其实本案例就是根据官网案例来的,只是进行了修改配置。Mybatis-plus官网一、搭建一个springboot项目&n
- 关于java图片验证码的文章最近更新了不少,帮助大家掌握java验证码的生成技术,下文为大家分享了java生成图片验证码最简单的方法,供大家
- /* String name = "adsbsadgsadgtewterfsdf"
- 常用事件的分类Java AWT里面的事件可以简单的分为窗体事件(WindowEvent),鼠标事件(MouseEvent),键盘事件(Key
- InputStreamReader和OutputStreamWriter源码分析1. InputStreamReader 源码(基于jdk1
- 之前写过一篇获取properties文件里面的值:Springboot 指定获取自己写的配置properties文件的值www.jb51.n
- Java如何实现线程中断?通过调用Thread类的实例方法interrupt。如下:Thread thread = new Thread()
- 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 一、静态库和动态库的区别1. 静态函数库这类库的
- 该方法把该字符串转换成一个新的字符数组。 String str="abcdefg"; char a[]; a=str.t
- 注:作者使用IDEA + Gradle注:需要有一定的java SpringBoot and SSM+Springcloud基础程序测试错误
- 目录一 . 前言二 . 流程梳理2.1 实例化创建2.1.1 doGetBean 入口2.1.2 doGetBean 补充节点2.1.3 A
- 本文实例为大家分享了PropertyDescriptor反射调用set和get方法,供大家参考,具体内容如下第一段:package com.
- Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,
- 实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下:1、在 AndroidManifest.xml 中添加操作权限2、
- 前言开发传统Java WEB工程时,我们可以使用JSP页面模板语言,但是在SpringBoot中已经不推荐使用了。SpringBoot支持如