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

SpringBoot 日志

今天我们来学习日志,日志是啥玩意呢,其实我们之前使用过超简易版的日志,就是打印,我感觉大家应该都一样,使用打印来检查代码是不是执行到这里了,通过控制台打印的日志来发现问题,排查问题,但是随着我们的项目越来越大,日志有了更多的用途;

1,日志用途

1)系统监控

系统监控是一个程序系统的标配,会监控每个方法响应,运行的时间,一旦发生异常,超过阈值就会报警;

2)数据采集

这个是我们会把日志进行持久化,之后把这些数据交给大数据专业的人来处理,具体嘎哈呢,来猜你喜欢,比如你刷一个美女视频,你看了好几遍,接下来他就会根据这个日志给你疯狂的推送美女了;哈哈哈哈哈哈;

3)日志审计

这个就涉及到安全方面了,比如你干了些违法的事情,日志中是都有的,来保证一定的安全性,就比如有人删库跑路,维修人员也能根据日志来恢复数据库;


2,打印日志

我们来看看直接使用System.out.println(),和打印日志的区别:

我们看到我们打印的日志缺少了一堆东西,

Spring打的日志有时间,级别,进程ID,线程名,Logger名(源代码类名),日志内容,下面我们来看看Spring是怎么打印日志的:

    @RequestMapping("/Logger2")public void Logger2(){Logger logger = LoggerFactory.getLogger(LoggerController.class);logger.info("Logger2方法打印日志");}

这里的Logger要选择SLF4J的,

我们看看我们打印的日志:

跟Spring的是一样的; 


3,日志框架-门面模式

其实这个SLF4J很类似门面模式,日志的打印方式有很多,log4j,JUL,Logback,这些都是能够打印日志的,但是他们之间的配置文件是会发生冲突的,程序员们之前还要去解决配置文件的问题,很麻烦,但是出现了SLF4J就相当于出现了一个统一的遥控器,来控制这几个打印日志的东西,就不会涉及到配置文件的问题了;这就像门面模式的设计模式,我们之前还学过单例模式和工厂模式;

门面模式就是有三个功能的方法,我们创建了一个统一接口能够调用他们几个;

SLF4J就是其他日志框架的门面;


4,SLF4J框架介绍

就是其他日志框架的门面,我们比如要使用log4j,SLF4J就会把log4j的配置文件加载进去,我们就可以使用了;


5,日志格式的说明

1)时间

2)级别

3)进程ID

4)线程名

5)Logger日志名(源代码类名)

这里都简写了,就有首字母

6)日志内容


6,日志级别

日志的级别从高到低依次为:FATAL,ERROR,WARN,INFO,DEBUG,TRACE

FATAL:致命错误,通常是没有这个日志信息了,你都致命了还看什么日志呢

ERROR:错误信息,级别较高的错误信息,不影响系统的继续运行

WARN:警告信息,不影响使用,但需要注意的问题

INFO:普通信息,用于记录应用程序正常运行时的信息,比如启动完成,请求处理完成

DEBUG:调试信息,需要调试等待时候关键信息打印 

TRACE:追踪信息,比DEBUG更细粒度的信息(除非有特殊用意,否则使用DEBUG替代)

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

 我们来看看,

只打印了三个日志,那两个日志哪去了,这就要设计到日志的配置了,为啥看不到呢,我们可以来一个例子嗷,假如你是大老板,你需要知道公司的运营情况和一些重大事件,那计算机部门的张三今天吃榴莲了好难闻需要跟你汇报吗,就是这个道理,但是我们说我老板就是闲,我就要知道也不是不可以,我们修改配置文件就行了; 


7,日志配置

1)级别

我们先来学习配置日志的级别,我们就使用YML了嗷,还是喜欢用YML:
 

logging:level:root: trace

现在再来重新打印一下:

这个就不演示了,,,,,我启动了好久DEBUG都没打印完;

2)持久化

有两个方法:

1)配置日志的文件名

logging:file:name: Logger/SpringLogger.log

 

 这样我们的日志文件就存到这里了;

2)配置日志的存储目录

logging:file:path: C:\Spring日志

 这种方法创建的话名字是固定的:

这两种方式是冲突的,如果两种都存在会以name为准; 

3)分割

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

这样就是以10kb来分割日志:

 

我们这样就把日志分割成了两部分; 

4)格式

具体看板书


8,更简单的打印日志方式

有更简单的日志打印方式就是使用注解来进行打印,@SLF4J,完了直接使用log.info,我们需要添加lombok依赖:

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version>
</dependency>
@RequestMapping("/Logger")
@RestController
@Slf4j
public class LoggerController {private static final Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/Logger1")public void Logger1(){System.out.println("打印日志");}@RequestMapping("/Logger2")public void Logger2(){logger.info("Logger2方法打印日志");}@RequestMapping("/Logger3")public void Logger3(){logger.trace("trace日志");logger.debug("debug日志");logger.info("info日志");logger.warn("warn日志");logger.error("error日志");}@RequestMapping("/Logger4")public void Logger4(){log.info("使用注解打印日志");}}

 

http://www.xdnf.cn/news/9890.html

相关文章:

  • ROS云课基础篇-02-C++-250529
  • 财管2 - 财务预测(内含增长率,可持续增长率)
  • [9-2] USART串口外设 江协科技学习笔记(9个知识点)
  • 20250529-C#知识:继承、密封类、密封方法、重写
  • Oracle 条件判断
  • <线段树>
  • 影楼精修-AI追色算法解析
  • FEMFAT许可的有效期限
  • 从融智学视角对决策态度进行定理级提炼,结合三标准数学建模
  • vue3: tmap (腾讯地图)using typescript
  • sudo apt-get update错误解决
  • Spring Boot+Activiti7入坑指南初阶版
  • 表单请求为什么需要进行 URL 编码?—详解application/x-www-form-urlencoded的正确用法
  • 从零开始的数据结构教程(五)​​动态规划(DP)
  • 数据结构 --- 顺序表
  • 安卓学习笔记-数据存储
  • [嵌入式实验]实验二:LED控制
  • Dynamics 365 Business Central AI Sales Order Agent Copilot
  • Redis 延迟队列
  • 【东枫科技】KrakenSDR 天线阵列设置
  • 1.测试过程之需求分析和测试计划
  • 【LeetCode 热题 100】最小路径和 / 最长回文子串 / 最长公共子序列 / 编辑距离
  • Ubuntu 中安装 PostgreSQL 及常规操作指南
  • JAVA与C语言之间的差异(二)
  • 1614. 括号的最大嵌套深度【 力扣(LeetCode) 】
  • 摩尔信使MThings无法生成机器码的解决方法
  • 腾讯云国际站性能调优
  • 【静电模拟】使用打火机的电子部分模拟手指静电
  • 机器学习-线性回归基础
  • 【Elasticsearch】suggest