【JavaEE进阶】 Spring Boot?志

发布时间:2024年01月22日

🎋关于日志

🚩为什么要学习?志

在没有学习spring时,我们可能使? System.out.print 来打印?志了.通过打印?志来发现和定位问题,或者根据?志来分析程序的运?过程.

在Spring的学习中,也经常根据控制台的?志来分析和定位问题.随着项?的复杂度提升,我们对?志的打印也有了更?的需求,?不仅仅是定位排查问题.

?如需要记录?些??的操作记录(?些审计公司会要求),也可能需要使??志来记录??的?些喜好,?志持久化,后续进?数据分析等.

但是 System.out.print 不能很好的满?我们的需求,我们就需要使??些专??志框架(也就是专业的事情交给专业的?去做)

🚩?志的?途

?志除了发现问题,分析问题,定位问题等,?志还有很多?途

  1. 系统监控

监控现在?乎是?个成熟系统的标配,我们可以通过?志记录这个系统的运?状态,每?个?法的响应时间,响应状态等,对数据进?分析,设置不同的规则,超过阈值时进?报警.?如统计?志中关键字的数量,并在关键字数量达到?定条件时报警,这也是?志的常?需求之?

  1. 数据采集

数据采集是?个?较?的范围,采集的数据可以作?在很多??,?如数据统计,推荐排序等.

  • 数据统计:统计??的浏览量(PV),访客量(UV),点击量等,根据这些数据进?数据分析,优化公司运营 策略
  • 推荐排序:?前推荐排序应?在各个领域,我们经常接触的各?各业很多也都涉及推荐排序,?如购物,?告,新闻等领域.数据采集是推荐排序?作中必须做的?环,系统通过?志记录??的浏览历史,停留时?等,算法?员通过分析这些数据,训练模型,给??做推荐.
    下图中的数据源,其中?部分就来?于?志记录的数据
    在这里插入图片描述
  1. ?志审计

随着互联?的发展,众多企业的关键业务越来越多的运?于?络之上.?络安全越来越受到?家的关注,系统安全也成为了项?中的?个重要环节,安全审计也是系统中?常重要的部分.国家的政策法规、?业标准等都明确对?志审计提出了要求.通过系统?志分析,可以判断?些?法攻击,?法调?,以 及系统处理过程中的安全隐患

  • ?如,?家平时都在做运营系统,其中运营?员在通过界?处理?些数据的时候,如果没有清楚的?志操作记录,?条数据被删除或者修改,你是?法找到是谁操作的,但是如果你做了相应的记录,该数据被谁删除或者修改就会??了然.还有?些内部的违规和信息泄漏(?如客?信息被卖掉)现象出现后,如果未记录留存?志,为事后调查提供依据,则事后很难追查(?些公司查看客?的信息都会被记录?志,如果频繁查询也会报警

🚩日志的简单使用

Spring Boot项?在启动的时候默认就有?志输出,如下图所?:
在这里插入图片描述
接下来我们看一下我们自己使用System.out.print打印一个日志

@RestController
public class LoggerController {
    @RequestMapping("/logger")
    public String logger() {
        System.out.println("我是日志");
        return "日志打印成功!!!";
    }
}

在这里插入图片描述
可以看到,我们通过 System.out.print 打印的?志,? SpringBoot 打印的?志缺少了很多信息.

SpringBoot内置了?志框架 SLF4J ,我们可以直接在程序中调? SLF4J来输出?志

🎄打印?志

打印?志的步骤:

  1. 在程序中得到?志对象.

  2. 使??志对象输出要打印的内容

🚩程序中得到?志对象

在程序中获取?志对象需要使??志??LoggerFactory,如下代码所?:

private static Logger logger = LoggerFactory.getLogger(类名.class);

LoggerFactory.getLogger需要传递?个参数,标识这个?志的名称.这样可以更清晰的知道是哪个类输出的?志.当有问题时,可以更?便直观的定位到问题类

使用注意事项:

  • Logger对象是属于org.slf4j包下的,不要导?错包.
    在这里插入图片描述
    在这里插入图片描述

🚩使??志对象打印?志

?志对象的打印?法有很多种,这里我们先使?info()?法来输出?志,如下代码所?:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LoggerController {
    private static Logger logger =  LoggerFactory.getLogger(LoggerController.class);;
    @RequestMapping("/logger")
    public String logger() {
        logger.info("======我是日志======");
        return "日志打印成功!!!";
    }
}

打印日志如下:

在这里插入图片描述

🎍?志格式的说明

日志的每一项代表着什么呢?

在这里插入图片描述

从上图可以看到,?志输出内容元素具体如下:

  1. 时间?期:精确到毫秒

  2. ?志级别:ERROR,WARN, INFO,DEBUG或TRACE

  3. 进程ID

  4. 线程名

  5. Logger名(通常使?源代码的类名)

  6. ?志内容

🚩?志级别的作用

?志级别代表着?志信息对应问题的严重性,为了更快的筛选符合?标的?志信息.

试想?下这样的场景,假设你是?家2万?公司的?板,如果每个员?的?常?作和琐碎的信息都要反馈给你,那你?定?暇顾及.于是就有了组织架构,?组织架构就会分级,有很多的级别设置,如下图所?:
在这里插入图片描述

有了组织架构之后,就可以逐级别汇报消息了,例如:组员汇报给组?,组?汇报给研发?组,研发?组

汇报给Java研发,等等依次进?汇报.

?志级别?概是同样的道理,有了?志级别之后就可以过滤??想看到的信息了,?如只关注error级别的,就可以根据级别过滤出来error级别的?志信息,节约开发者的信息筛选时间

🚩?志级别的分类

?志的级别从?到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE

  • FATAL:致命信息,表?需要?即被处理的系统级错误.

  • ERROR:错误信息,级别较?的错误?志信息,但仍然不影响系统的继续运?.

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

  • INFO:普通信息,?于记录应?程序正常运?时的?些信息,例如系统启动完成、请求处理完成等.

  • DEBUG:调试信息,需要调试时候的关键信息打印.

  • TRACE:追踪信息,?DEBUG更细粒度的信息事件(除?有特殊?意,否则请使?DEBUG级别替代)

这里需要注意一点:?志级别通常和测试?员的Bug级别没有关系.

  • ?志级别是开发?员设置的,?来给开发?员看的.?志级别的正确设置,也与开发?员的?作经验有关.如果开发?员把error级别的?志设置成了info,就很有可能会影响开发?员对项?运?情况的判断.出现error级别的?志信息较多时,可能也没有任何问题.测试的bug级别更多是依据现象和影响范 围来判断

?志级别的顺序如下图所示:
在这里插入图片描述

级别越?,收到的消息越少

🚩?志级别的使?

?志级别是开发?员??设置的.开发?员根据??的理解来判断该信息的重要程度

针对这些级别,Logger对象分别提供了对应的?法,来输出?志

@PostConstruct
public String printLog() {
    logger.trace("================= 我是trace ===============");
    logger.debug("================= 我是debug ===============");
    logger.info("================= 我是info ===============");
    logger.warn("================= 我是warn ===============");
    logger.error("================= 我是error ===============");
    return "打印不同级别的?志" ;
}

由于SpringBoot默认的?志框架是Logback,Logback没有FATAL 级别,它被映射到 ERROR .
出现fatal?志,表?服务已经出现了某种程度的不可?,需要需要系统管理员紧急介?处理.通常情况下,?个进程?命周期中应该最多只有?次FATAL记录.

打印结果如下:

在这里插入图片描述

我们发现,只打印了info,warn和error级别的?志

这就与?志级别的配置有关,?志的输出级别默认是info级别,所以只会打印?于等于此级别的?志,也就是info,warn和error.

🍀?志配置

上述讲的是?志的使?,?志框架还?持我们更灵活的输出?志,包括内容,格式等

🚩配置?志级别

?志级别配置只需要在配置? 件中设置"logging.level"配置项即可,我们将默认输出级别改为debug 如下所?,

logging:
  level:
    root: debug

我们再次进行打印,看一看效果:

在这里插入图片描述

🚩?志持久化

以上的?志都是输出在控制台上的,然?在线上环境中,我们需要把?志保存下来,以便出现问题之后追溯问题.把?志保存下来就叫持久化.?志持久化有两种?式

  1. 配置?志?件名

  2. 配置?志的存储?录

在这里插入图片描述

配置文件文件名如下:

在这里插入图片描述

后?可以跟绝对路径或者相对路径

配置文件的储存目录如下:

logging:
 file:
  path: D:/temp

使用该配置,会在该目录下创建一个默认的spring.log的文件储存日志
注意:

  • logging.file.name 和 logging.file.path 两个都配置的情况下,只?效其?,以logging.file.name 为准

🚩配置?志?件分割

如果我们的?志都放在?个?件中,随着项?的运?,?志?件会越来越?,需要对?志?件进?分割.

当然,?志框架也帮我们考虑到了这?点,所以如果不进?配置,就??动配置。默认?志?件超过10M就进?分割x

配置项说明默认值
logging.logback.rollingpolicy.file-name-pattern?志分割后的?件名格式${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
logging.logback.rollingpolicy.max-file-size?志?件超过这个??就?动分割10MB

yml配置如下:

logging:
 file:
  name: D:/tmp/springboot.log
 logback:
  rollingpolicy:
   max-file-size: 1KB
   file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

分割结果如下:
在这里插入图片描述

🎋配置?志格式

上面所看的配置格式都是默认的。

其实日志格式也是可以配置的。?持控制台和?志?件分别设置

在这里插入图片描述
配置项说明:

  1. %clr(表达式){颜?}设置输??志的颜??持颜?有以下?种:
    ? blue ? cyan ? faint ? green ? magenta ? red ? yellow
  2. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd’T’HH:mm:ss.SSSXXX}}?期和时间–精确到毫秒

%d{}?期

${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd’T’HH:mm:ss.SSSXXX}
?空表达式,获取系统属性LOG_DATEFORMAT_PATTERN ,若属性LOG_DATEFORMAT_PATTERN 不存在,则使?
-yyyy-MM-dd HH:mm:ss.SSSXXX 格式,系统属性可以System.getProperty(“LOG_DATEFORMAT_PATTERN”) 获取

  1. %5p 显??志级别ERROR,MARN,INFO,DEBUG,TRACE.

  2. %t 线程名. %c 类的全限定名. %M method. %L 为?号.%thread 线程名称. %m 或者 %msg 显?输出消息. %n 换?符

  3. %5 若字符?度?于5,则右边?空格填充. %-5 若字符?度?于5,则左边?空格填充. %.15 若字符?度超过15,截去多余字符.%15.15 若字符?度?于15,则右边?空格填充.若字符?度超过15,截去多余字符

更多的说明,点我查看

如果设置了颜色没有显示怎么办呢?

解决方法如下:

  1. 打开启动配置 在这里插入图片描述
  2. 添加VM options 在这里插入图片描述
    在这里插入图片描述
  3. 添加VM options -Dspring.output.ansi.enabled=ALWAYS

在这里插入图片描述

  1. 重新启动程序,就发现控制台?持颜?了 在这里插入图片描述

🎄更简单的?志输出

每次都使?LoggerFactory.getLogger(xxx.class)很繁琐,且每个类都添加?遍,lombok给我们提供了?种更简单的?式.

  1. 添加lombok框架?持

  2. 使? @slf4j 注解输出?志

关于lombok的的使用与安装参考博主在【JavaEEj进阶】 Spring实现留言板中对lombok的使用

lombok提供的 @Slf4j 会帮我们提供?个?志对象log,我们直接使?就可以

在这里插入图片描述

实现代码如下:

@Slf4j
@RestController
public class LogController {
    @PostConstruct
    public void log(){
        log.info("--------------我是要输出?志的内容----------------");
    }
}

在这里插入图片描述

?总结

  1. ?志是程序中的重要组成部分,使??志可以快速的发现和定位问题,Spring Boot内容了?志框架,默认情况下使?的是info?志级别将?志输出到控制台的,我们可以通过lombok提供的@Slf4j 注解和 log 对象快速的打印?定义?志.
  2. ?志包含6个级别,?志级别越?,收到的?志信息也就越少,我们可以通过配置?志的保存名称或保存?录来将?志持久化

关于《【JavaEEj进阶】 Spring实现留言板》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

文章来源:https://blog.csdn.net/m0_71731682/article/details/135745105
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。