【Spring日志】

一.日志作用

1.定位和发现问题

这是日志的主要用途,通过查看日志,我们可以定位问题发生的位置,从而快速的发现问题,分析问题.

2.系统监控

监控几乎是一个成熟系统的标配,我们可以通过日志记录这个系统的运行状态,比如记录方法的响应时间,响应状态,通过设置不同的规则,超过阈值就进行报警.

3.数据采集

采集的数据可以作用在很多方面,比如数据统计,推荐排序.

  • 数据统计:统计页面的浏览量,访客量,点击量
  • 推荐排序:购物/广告/新闻等都设计到推荐排序,数据采集是推荐排序中必须要做的.

4.日志审计

安全审计是系统安全中非常重要的一部分. 通过系统日志分析,可以判断一些非法攻击/非法调用.

二.日志的使用

Spring Boot项目在启动的时候默认就有日志输出:

这个日志格式是这样的:

它比我们通过System.out.print打印的日志多了很多信息.

那我们怎么打印自己写的日志呢?

SpringBoot内置了日志框架Slf4j,我们可以在程序中调用Slf4j来输出日志.

三.日志框架

Slf4j不同于其他的日志框架,它不是一个真正的日志实现,而是一个对日志框架制定的一种规范,标准,接口. 所以Slf4j并不能独立使用,需要和具体的日志框架配合使用.


门面模式/外观模式

门面模式,提供了一个统一的接口,用来访问子系统中的一组接口,其主要特征是定义了⼀个⾼层接⼝, 让⼦系统更容易使⽤.

Slf4j是门面模式的典型应用

门面模式的优点

1.减少了系统的相互依赖,实现了客户端和子系统的耦合关系

2.提高了灵活性,简化了客户端对子系统的使用难度

3.提高安全性.灵活设方法的定访问权限

四.SLF4J日志框架

Slf4j就相当于是其他日志框架的门面,可以理解为是提供⽇志服务的统⼀API接⼝

为什么要引入日志门面?

常见的日志框架有 log4j , logback , 一个程序常常需要不同的日志框架, 而不同的日志框架的API和配置文件不同, 如果多个日志框架共存,就要维护多套配置文件,而且如果更换日志框架,还必须修改代码 , 这个过程很容易产生冲突 .

而如果引入日志门面,应⽤程序和⽇志框架(框架的具体实现)之间有了统⼀的API接⼝(⻔⾯⽇志框架 实现), 此时应⽤程序只需要维护⼀套⽇志⽂件配置, 且当底层实现框架改变时, 也不需要更改应⽤程序代码.

Slf4j就是这个日志门面.

所以Slf4j不是一个真实的日志框架实现,是一个日志框架门面 , 具体实现是log4j/log4j/logback/jul 

门面模式只是slf4j使用的一种设计模式 , 还有其他的设计模式.

打印⽇志的步骤

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

在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory

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

⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志

日志格式

日志级别

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

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

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

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

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

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

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

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

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

⽇志级别的使⽤

⽇志级别是开发⼈员⾃⼰设置的. 开发⼈员根据⾃⼰的理解来判断该信息的重要程度,类似公司管理, 通常由领导来判断什么样的事情需要汇报, 什么样的事情不需要汇报.

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

日志对象名

通常使用源代码的类名 , 也可以自定义.

这里写了五种不同级别的日志信息

然而发现只打印了三条日志信息,debug和trace类型的并未打印.

这是由于日志的输出级别默认是info级别,所以只会打印⼤于等于此级别的⽇志, 也就 是info, warn和error.

配置成debug模式后

debug日志可以打印; 但是trace优先级比debug低,不能打印.

日志配置

这里以配置properties文件为例.

1设置日志的级别

logging.level.root: debug

配置根目录下所有文件日志的级别

logging.level.包路径 :debug

配置某个包下文件日志的级别

2设置颜色(idea)

 第一步:打开Edit Configuration

第二步:添加这串

  • -Dspring.output.ansi.enabled=ALWAYS

3日志持久化

数据保存在数据库中,是一种持久化的方式

日志保存在文件中,也是一种持久化的方式

这里是日志保存在文件中,有两种⽅式

1. 配置⽇志⽂件名

2. 配置⽇志的存储⽬录

logging.file.name

可以是相对路径,也可以是绝对路径. 可以是路径+文件名/ 单独一个文件名(以当前目录作为基准目录)

logging.file.path

只能是目录 比如var/log

注意: logging.file.name 和 logging.file.path 两个都配置的情况下, 只⽣效其⼀, 以 logging.file.name 为准.

比如将日志文件保存到aaa.log

4日志分割

修改日志格式

logging.pattern.console

修改控制台的日志格式

logging.pattern.file

修饰文件的日志格式

日志的简单写法

使用注解@Slf4j的方式

配置项

说明

默认值

logging.logback.rollingpolicy.fil e-name-pattern

⽇志分割后的⽂件名 格式

${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

logging.logback.rollingpolicy.m ax-file-size

⽇志⽂件超过这个⼤ ⼩就⾃动分割

 10MB

   

5配置⽇志格式

打印⽇志的格式, 也是⽀持配置的. ⽀持控制台和⽇志⽂件分别设置

配置项

说明

默认值

logging.pattern.console

控制台⽇ 志格式

%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MMdd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:- %5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]) {faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

logging.pattern.file

⽇志⽂件 的⽇志格 式

%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MMdd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

注意需要简单配置一下, 让idea⽀持控制台颜⾊显⽰,参考第二点.

更简单的⽇志输出

由于每个类都要使用LoggerFactory获取日志对象,lombok给我们提供了 ⼀种更简单的⽅式.

1. 添加 lombok 框架⽀持

2. 使⽤ @slf4j 注解输出⽇志。

@slf4j会提供一个日志对象log,直接使用就可以 .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/187018.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

递归算法学习——二叉树的伪回文路径

1,题目 给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 示例…

python-选择排序

选择排序是一种简单直观的排序算法,它的基本思想是每一轮选择未排序部分的最小元素,然后将其放到已排序部分的末尾。这个过程持续进行,直到整个数组排序完成。(重点:通过位置找元素) 以下是选择排序的详细步骤和 Python 实现&…

自动语音识别 支持86种语言 Dragon Professional 16 Crack

从个体从业者到全球组织,文档密集型行业的专业人士长期以来一直依靠 Dragon 语音识别来更快、更高效地创建高质量文档,减少管理开销,以便他们能够专注于客户。了解 Dragon Professional v16 如何通过单一解决方案提高标准,为各个业…

你听过斯大林病毒吗?

相信不少小伙伴看过这种红眼特效,那么你知道这个特效最早出自哪里吗? 其实这个红眼病毒最早出于俄罗斯的电脑病毒斯大林,一旦电脑感染这个病毒,屏幕上就会出现自带一个红眼特效的斯大林人像,同时不断播放苏联国歌。 …

【JavaEE】认识多线程

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《vaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&am…

新版画中画documentPictureInPicture API使用

关于该API,chrome dev有一篇比较好入门的文章,如果你没看过强烈推荐你先看这篇基础用法,该文章只针对API的特性和chrome dev文章进行扩展性说明。 提前说明,目前该API是非w3c草案功能,从chrome 116开始已经强推到stabl…

PyQt6运行QTDesigner生成的ui文件程序

2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计18条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~、第2讲 PyQt6库和工具库Q…

BUUCTF [GXYCTF2019]gakki 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 下载附件,解压得到一张.jpg图片。 解题思路: 1、放到010 Editor中看一下,找到rar压缩包的文件头。使用Kali中的binwalk工具…

【Linux】EVIOCGBIT

EVIOCGBIT(ev, len) 该怎么理解? 我们可以推断出,它是一个宏,它的前两个参数已经确定了,具体的功能由后两个参数(ev,len)来决定。Linux-4.9.88\include\uapi\linux\input.h #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, E, 0x20 …

Linux环境配置Seata开机自启脚本(在MySQL和Nacos启动后启动)

之前给seata配置了一个开机启动脚本,但是经常出现启动失败,查询日志要么MySQL没有连接上要么nacos连接不上,原因都是因为服务器重启的时候这两个服务都还没有完全启动,所以正常的做法应该是启动前先等前置服务启动好了再启动seata…

你知道吗,这些行业的人也是工程师哦

止这些,其工作涉及多种领域,也就是说,有很多细分行业的开发人员也算是电子工程师,下面我们来看看有哪些电子工程师! 1、应用电子工程师 主要负责将电子技术与特定应用相结合,设计并开发满足特定需求的电子…

【教3妹学编程-算法题】二叉树中的伪回文路径

3妹:好冷啊, 冻得瑟瑟发抖啦 2哥 : 又一波寒潮来袭, 外面风吹的呼呼的。 3妹:今天还有雨,2哥上班记得带伞。 2哥 : 好的 3妹:哼,不喜欢冬天,也不喜欢下雨天,要是我会咒语…

常用的Linux的指令

目录 常用指令 1、文件和目录操作: 2、文件查看和编辑 3、系统信息 4、进程管理 5、用户和权限 6、网络操作 7、压缩和解压 8、软件包管理 常用指令 1、文件和目录操作: ls:列出目录内容 cd: 切换目录 pwd:显…

leetcode:随机链表的复制

题目描述 题目链接:138. 随机链表的复制 - 力扣(LeetCode) 题目分析 这个题目很长,但是意思其实很简单:就是一个单链表,每个结点多了一个指针random随机指向链表中的任意结点或者NULL,我们血需…

chatGPT4机器学习数据后最终保留在机器里的是什么? 机器是怎么产生智能的? TensorFlow没有直接开发出类似GPT-4这样的模型

机器学习数据后最终保留在机器里的是机器学习模型。机器学习模型是机器学习系统中的核心,它是机器学习系统能够进行推理和预测的基础。 机器学习模型通常由参数组成。参数是机器学习模型的权重和偏差。机器学习系统通过训练来学习这些参数。训练是指让机器学习系统…

在 Ubuntu 上安装最新版的 Calibre

目录 前言 方法1:从 Ubuntu 的仓库安装 Calibre 卸载 Calibre 方法2:获取最新版本的 Calibre 卸载 Calibre 结语 前言 Calibre 是一款自由开源的电子书软件。下面介绍如何在 Ubuntu Linux 上安装它。 作为电子书管理的瑞士军刀,Calibre …

openEuler 22.03 LTS x86_64 cephadm 部署ceph 16.2.14 未完成 笔记

环境 准备三台虚拟机 10.47.76.94 node-1 10.47.76.95 node-2 10.47.76.96 node-3 下载cephadm [rootnode-1 ~]# yum install cephadm Last metadata expiration check: 0:11:31 ago on Tue 21 Nov 2023 10:00:20 AM CST. Dependencies resolved. Package …

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境爬虫模型训练实际应用 模块实现1. 数据准备1)爬虫下载原始图片2)手动筛选图片 相关其它博客工程源代码下载其它资料下载 前言 本项目通过爬虫技术获取图片,利用OpenCV库对图像进行处理&a…

荆涛《春节回家》:歌声中的年味与乡愁

荆涛《春节回家》:歌声中的年味与乡愁春节,对于每一个中国人来说,都是一年中最为重要的时刻。它不仅仅是一个节日,更是团圆、乡愁、回忆与希望的象征。歌手荆涛的歌曲《春节回家》恰恰捕捉到了这些情感,用音乐为人们绘…

Leetcode—2824.统计和小于目标的下标对数目【简单】

2023每日刷题&#xff08;三十九&#xff09; Leetcode—2824.统计和小于目标的下标对数目 实现代码 class Solution { public:int countPairs(vector<int>& nums, int target) {int n nums.size();sort(nums.begin(), nums.end());int left 0, right left 1;i…