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

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("使用注解打印日志");}}

 

相关文章:

  • Windows 下如何打开设置环境变量的对话框
  • 区间DP概述(JAVA)
  • 重说话题“如何写好一份技术文档”
  • 【电拖自控】转速检测数字测速(脉冲计数测速)
  • unordered_map与map之间的区别和联系
  • 经典深度学习网络【一天了解一个ok?】【基本点创新点】
  • Android高级开发第二篇 - JNI 参数传递与 Java → C → Java 双向调用
  • Spring 核心知识点补充
  • 第6讲、 Odoo 18 `tools` 模块深度分析
  • 技术分享 | Oracle SQL优化案例一则
  • OSI 七大层详解
  • 桂花网体育运动监测方案:开启幼儿园运动健康管理新篇章
  • SpringBoot集成第三方jar的完整指南
  • 利用TOA与最小二乘法直接求解
  • ubuntu系统上运行jar程序输出时间时区不对
  • 【第4章 图像与视频】4.1 图像的绘制
  • 【第4章 图像与视频】4.6 结合剪辑区域来绘制图像
  • 语法糖介绍(C++ Python)
  • Yum配置第三方源与本地源详解
  • Java-代码段-http接口调用自身服务中的其他http接口(mock)-并建立socket连接发送和接收报文实例
  • 用word做旅游网站/百度医生
  • 唯品会购物网站开发项目/国外独立站网站
  • 帝国做的网站怎么上传/百度关键词搜索排名
  • php网站建设论文/南宁seo外包服务商
  • 网站建设 上市公司/哪个平台可以买卖链接
  • 网站建设和网络优化/百度公司是国企还是私企