【Spring】Spring Boot 日志(8)

[复制链接]
发表于 2026-1-1 14:55:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。

博客涉及框架的紧张知识点,根据序号学习即可。


目次
本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。
博客涉及框架的紧张知识点,根据序号学习即可。
1、日志日志概述
1.1学习日志日志的须要性
1.2日志日志的用途
2、日志使用
2.1打印日志
2.2日志框架
2.3门面模式(外貌模式)
3、日志格式的阐明
4、日志级别
4.1日志级别的分类
4.2日志级别的使用
5、日志设置
5.1设置日志级别
5.2日志长期化
5.3分别日志文件巨细
5.4设置日志格式
6、简朴化的日志输出
6.1添加lombok依赖
6.2使用注解@Slf4j输出日志



1、日志概述

1.1学习日志的须要性

在第一次学习编程语言的时间,我们就在使用printf大概System.out.println等打印语句打印日志了,为什么日志这么紧张呢?由于在编程的学习过程中,不大概不堕落,以是打印日志是最快来发现和定位题目的,大概说可以根据日志来分析步伐的运行过程。

1.2日志的用途

(1)体系监控监控:在大数据期间,监控监控险些是一个成熟体系了,我们可以通过日志记载这个体系的运行状态,相应状态,在关键时候某规则高出了阈值则立马报警
(2)数据收罗:日志可以收罗数据为数据统计、保举排序做出巨大贡献。【数据统计:统计某页面的欣赏量(PV),访客量(UV),点击量等来优化公司运营战略】【保举排序:现在保举排序应用在各大范畴,比如我们认识的抖音、拼多多等日流量爆炸的应用,点击保举。数据收罗是保举排序工作中的非常紧张的一步,体系通过日志记载用户的欣赏汗青,停顿时间等,算法职员就会通过这些数据练习模子,给用户做保举】
(3)日志审计:随着互联网的发展,越来越多的公司关键业务运行在网络在上,网络安全越来越受各人关注。通过日志分析,在公司中可以清晰的知道是谁做了某些违规利用,大概是信息走漏等等。
2、日志使用

2.1打印日志

(1)在SpringBoot项目启动时,就会有默认的日志打印,如下图所示,那么这些日志和System.out.println()打印的有什么区别呢?

可以知道System.out.println()只会打印括号内里的内容,相较于SpringBoot的打印少了许多信息。
然而SpringBoot内置了日志框架Slf4j,我们可以在步伐中直接调用Slf4j来输出日志。

(2)打印日志的步调:
①在步伐中获取日志对象
②使用日志对象打印日志
留意:导包的时间别导错了!!!!Logger对象时属于org.slf4j包下的
  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. @RestController
  6. public class LoggerController {
  7.     //在程序中获取日志对象需要使用日志工厂LoggerFactory
  8.     //LoggerFactory.getLogger需要传递一个参数,标识这个日志的名称,这样可以更清晰的知道是哪个类输出的日志,更好定位
  9.     private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
  10.     //使用日志对象打印日志,info()只是一种打印日志的方法
  11.     @RequestMapping("/logger")
  12.     public String logger(){
  13.         logger.info("-------------要输出的日志------------");
  14.         return "打印日志";
  15.     }
  16. }
复制代码


2.2日志框架

(1)

(2)SLF4J差异于其他日志框架,它不是一个真正的日志实现,而是一个抽象层,对日志框架订定的一种规范,尺度,接口。全部SLF4J并不能独立使用,须要和详细的日志框架共同使用。SLF4J就是其他日志框架的门面,可以明白为是提供日志服务事故同一API接口,并不涉及到详细的日志逻辑框架
(3)那么为什么要SLF4J当门面呢?而不直接使用日志框架(即详细的日志逻辑)。固然这肯定是有缘故起因的——如果不引入日志门面,在开辟某个项目时,已经使用了log4j,然而在功能的实现时,须要依赖另一个日志框架logback,那么你又要把logback也加载进去,如许导致的就是有两个日志框架共存,欠好维护设置文件,更换日志框架时修改代码,修改的代码有辩论怎么办?以是这就体现出引入日志门面的长处了,引入之后,应用步伐和日志框架之间有了同一的API接口,此时只须要维护一套日志文件设置,且当底层实现框架改变时,也不须要更改应用步伐的代码了

2.3门面模式(外貌模式)

(1)门面模式
①SLF4J是门面模式的典范应用(但是不光仅使用了门面模式)
②界说:门面模式(Facade Pattern)又称为外貌模式,提供了一个同一的接口,用来访问子体系中的一群接口。紧张特性是界说了一个高层接口,让子体系更容易使用
③门面模式紧张包罗2种脚色:
外貌脚色(Facade):也称门面脚色,体系对外的同一接口
子体系脚色(SubSystem):可以同时有一个或多个SubSystem。每个SubSystem都不是一个单独的类,而是一个类的聚集。SubSystem并不知道Facade的存在,对于SubSystem而言,Facade知识另一个客户端而已(Facade对SubSystem透明)
(2)举例:
去课堂自习,第一个进课堂的人儿 一样平常先会开前灯,再开中灯,再开后灯,如许整个课堂都亮了,以便更好的举行自习;自习竣事时,末了一个人儿,会先关后灯,再关中灯,再关前灯后脱离。
如果设置一个总开关,来控制整个课堂的灯的开关就会很方便。
在这里,总灯就是外貌脚色,而前中后灯都是子体系脚色。
(3)优点:
①镌汰了体系的相互依赖,实现了客户端与子体系的耦合关系,这使得子体系的厘革不会影响到调用它的客户端
②进步了机动性,简化了客户端对子体系的使用难度,客户端无需关心子体系的详细实现方式,而只须要和面向对象交互即可
③进步了安全性,可以林火设定访问权限,不在门面临象中开通方法,就无法访问



3、日志格式的阐明



①时间日期:准确到秒
②日志级别
③进程ID
④线程名
⑤Logger名(通常使用源代码的类名)
⑥日志内容



4、日志级别

4.1日志级别的分类

(1)日志级别代表日志信息对应题目的严肃性,为了更快的筛选符合目标的日志信息。有了日志级别就可以过滤本身想看到的信息了,比如只关注error级别的,就可以根据级别过滤出error级别的日志信息,节省开辟者的信息筛选时间
(2)日志级别的分类:
日志的级别从高到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
①FATAL:致命信息,体现须要立即被处置惩罚的体系级错误
②ERROR:错误信息,级别较高的错误日志信息,但仍然不影响体系的继承举行
③WARN:告诫信息,不影响使用,是须要留意的题目
④INFO:平常信息,用于记载应用步伐正常运行的一些信息,比方体系启动完成、哀求处置惩罚完成等
⑤DEBUG:调试信息,须要调试时间打印关键信息
⑥TRACE:追踪信息,比DEBUG更细粒度的信息事故(除非有特别用意,否则请使用DEBUG取代)

4.2日志级别的使用

  1. @RequestMapping("/printLog")
  2.     public String printLog(){
  3.         logger.trace("===trace===");
  4.         logger.debug("===debug===");
  5.         logger.info("===info===");
  6.         logger.warn("===warn===");
  7.         logger.error("===error===");
  8.         return  "打印不同级别的日志";
  9.     }
复制代码


SpringBoot默认的日志框架是Logback,Logback没有fatal级别,它被映射到error。
观察运行效果,发现只打印了info、warn和error级别的日志,是由于日志的输出级别默认是info,以是只会打印大于即是info级别的日志,也就是info、warn、error。




5、日志设置

5.1设置日志级别

(1)Properties设置:
   logger.level.root:debug
  (2)yml设置:
   logger:
          level:
                  root:debug
  5.2日志长期化

(1)开辟环境上的日志都是输出到控制台上的,然而在线上环境中,我们须要把日志生存下来,以便出现题目之后追溯题目。把日志生存下来就叫做长期化。
(2)日志长期化的两种方式:
①设置日志文件名
   Properties设置:
  logger.file.name:logger/springboot.log
  
  Yml设置:
  logging:
          file:
                  name:logger/springboot.log
  [两者任选其一即可]
  ②设置日志的存储目次
   Properties设置:
  logger.file.path:D:/temp
  
  Yml设置:
  logging:
          file:
             path:/temp
  [两者任选其一即可]
  (3)当logger.file.name与logger.file.path两个都设置的环境下,只收效其一,以logger.file.name为准

5.3分别日志文件巨细

(1)如果我们的日志都放在一个文件中,随着项目标运行,日志文件会越来越大,须要对文件举行分割。【固然日志框架也思量到了,如果不举行设置,默认就是10M举行分割】
(2)设置日志文件的分割:
①Properties设置:
  
  1. logging.logback.rollingpolicy.max-file-size: 1KB
  2. logging.logback.rollingpolicy.file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}}.%i
复制代码
②yml设置:
  
  1. logging:
  2.   logback:
  3.     rollingpolicy:
  4.       max-file-size: 1KB
  5.       file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}}.%i
复制代码
(3)
logging.logback.rollingpolicy.file-name-pattern:日志分割后的文件名格式
logging.logback.rollingpolicy.max-file-size:日志文件高出这个巨细就主动分割
5.4设置日志格式

(1)现在日志打印的格式是默认的,打印日志的格式,也是支持可设置的,支持控制台和日志文件分别设置。

(2)
logging.pattern.console:控制台日志格式
logging.pattern.file:日志文件的日志格式
①properties设置:
   logging.pattern.console='%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
  ②yml设置:
   logging:
          pattern:
                  console:'%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
                  file:'%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
  (3)通常环境下我们使用默认的日志打印格式就富足了



6、简朴化的日志输出

6.1添加lombok依赖

每次使用日志工厂创建日志对象时非常繁琐的,而且险些每个类都须要添加一遍,lombok给我们提供了一种更简朴的方式就是使用 @Slf4j 注解输出日志 
6.2使用注解@Slf4j输出日志


  1. import lombok.extern.slf4j.Slf4j;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @Slf4j
  5. @RestController
  6. public class LogController {
  7.     @RequestMapping("/log")
  8.     public void log(){
  9.         log.info("-----要输出日志内容-----");
  10.     }
  11. }
复制代码

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表