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

Spring日志框架

前言

本文我们简单说说关于Spring中的日志框架,以及对应的注解

我们知道,公司服务器在运行的时候,一定会打印日志,有很多优点,比如预防报警,或者是某重大事故尝试修复等等都需要查看日志

应该说日志对我们来说并不陌生,我们在之前刷题或者是程序遇到bug的时候也经常会将程序的状态等打印在控制台上

但是随着项目的复杂度的增加,仅仅使用System.out,print语句已经不能满足我们了,我们需要更加专业的一些日志框架来帮助我们解决问题

本篇我们就将讲解一个Spring引入的外部框架,简单好用

就像我们平常控制台上的日志一样,可以体现更多的信息

日志的用途

我们首先知道日志是发现问题解决问题的

但是日志不仅仅只支持这几个功能,他的功能甚至更加强大

比如日志还有以下功能

1.系统监控

        通过日志监控一个系统的运行状态,每一个方法的响应时间,响应状态的设置不同的规则,超过规则达到一定阈值进行报警啊等等等

2.数据采集

         统计页面的浏览量,从而可以设置主页的推荐排序啊等等

3.日志审计

         这就涉及国家要检查企业的日志等等,涉及一些网络安全问题

日志的使用

首先我们来介绍一下启动spring的时候系统生成的日志

这里的每一条日志都是由 时间 + 日志级别 + 进程号 + --- + 项目名 + 线程名 + Logger名(通常使用源代码的类名) + 日志内容

其中日志的等级分为

FATAL,ERROR,WARN,INFO,DEBUG,TRACE

注:这里的日志级别主要是给不同的人来过滤信息使用的

FATAL:需要立即被处理的系统级别错误

ERROR:需要出来,但是不影响系统的持续运行

WARN:不影响使用,但是需要注意

INFO:普通信息,比如请求完成等

DEBUG:调试信息,一般不显示

TRACE:比DEBUG更细粒度的调试信息

级别越高,收到的信息越少

下面我们来打印点自己的日志瞅瞅

我们发现这里INFO以下级别的日志根本没有被打印出来

注:SpringBoot的默认日志框架是logback,logback中不存在fatal级别,他被逻辑映射到了error中

我们发现这里并没有出现DEBUG级别和TRACE级别的日志,这是因为Spring的默认参数设置是INFO级别,只会显示这个级别以上的日志文件,我们如果想看到低级别的日志可以去配置文件中修改参数即可

将logger.level修改成debug就可以看到debug及以上的信息了

设计模式

日志这里涉及两个设计模式 

工厂模式和门面模式

由于我们在之前介绍过工厂模式,这里就做过多赘述了

我们这里简单介绍一下门面模式(又称外观模式)

我们这里使用的框架叫做SLF4J 这就是一个日志的门面

主要做的事情就是让客户端减少和底层的直接交互,而是通过这个抽象层,访问子系统的一堆接口,降低了其中的耦合性,定义了一个高层接口,让子系统更容易被使用

比如你家的智能家居

你可以通过手机上的软件来直接操作家里的各种电器,而不需要使用底层电器的直接开关

日志的持久化

日志通常是不断产生的,我们需要将日志持久化到文件中,以便于保存或者出现问题的时候及时查看 ,所以我们需要将日志持久化到文件中保存

这里在文件中设置配置保存的路径或者文件名即可

这里我们的配置可以使用两种

1.使用路径 + 文件名

比如  logging.file.name    就会发现在项目中多了一个文件夹和一个文件

2.使用路径(不支持文件名,这里使用文件名会被当做文件路径)

logging.file.path  这里不管使用什么后缀都不会生效

注解方式使用日志 

我们只需要导入lombok的依赖即可使用 

加入一个@slf4j注解即可,其实现和工厂模式的实现相同,我们可以查看idea给的反编码

查看官方文档

点击官方文档,

相关文章:

  • 七、其它线性 DP
  • Git,GitHub,Gitee,GitLab 四者有什么区别?
  • 9.用FFmpeg测试H.264文件的解码时间
  • c入门基础题(2)
  • 编译器特性..
  • 多叉树题目:N 叉树的最大深度
  • C++教学——从入门到精通 5.单精度实数float
  • ArcGIS支持下SWAT与CENTURY模型的结合:流域水碳氮综合模拟
  • 【React】onClick点击事件传参的4种方式
  • 2024年美团笔试题(1)
  • 大数据-TXT文本重复行计数工具
  • OpenPLC_Editor 在Ubuntu 虚拟机安装记录
  • 什么是智慧公厕?智慧服务区下智慧公厕的重要性和价值
  • UOS部署oceanbase
  • SQLite3进行数据库各项常用操作
  • Angular 响应式表单之下拉框
  • Apache的基本使用
  • css选择器
  • golang中接口赋值与方法集
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js递归,无限分级树形折叠菜单
  • js继承的实现方法
  • Markdown 语法简单说明
  • mysql 5.6 原生Online DDL解析
  • Netty源码解析1-Buffer
  • tensorflow学习笔记3——MNIST应用篇
  • 程序员该如何有效的找工作?
  • 关于List、List?、ListObject的区别
  • 基于HAProxy的高性能缓存服务器nuster
  • 基于组件的设计工作流与界面抽象
  • 记一次和乔布斯合作最难忘的经历
  • 区块链共识机制优缺点对比都是什么
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 通信类
  • 微信小程序开发问题汇总
  • 我这样减少了26.5M Java内存!
  • Hibernate主键生成策略及选择
  • # 数据结构
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $L^p$ 调和函数恒为零
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (黑马C++)L06 重载与继承
  • (论文阅读30/100)Convolutional Pose Machines
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)Linux Shell编程——输入输出重定向
  • (学习日记)2024.01.09
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ./configure、make、make install 命令
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net Application的目录
  • .net core 6 集成 elasticsearch 并 使用分词器