【Spring日志】

news2024/12/25 1:44:58

一.日志作用

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,直接使用就可以 .

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硅光子,缘何打造量子科技的下一个十年?

/目录/ 一、硅光子技术将率先实现室温、容错量子计算机 二、用于量子科技的硅光子器件 2.1. 单光子源 2.2. 光子探测器 2.3. 波分复用技术 2.4. 低温技术 2.5. 芯片互连 三、可拓展的量子信息应用 3.1. 多光子和高维应用 3.2. 量子纠错 3.3. 量子密钥分发 3.4. 量子…

Android runtime层是如何通过缩减代码来缩减内存的

文章目录 前言:Android 在设备上改进内存的秘密优化编译器101代码大小改进消除写入障碍隐式暂停检查合并回调其他优化改进代码下沉循环优化消除死代码 – SimplifyAlwaysThrows加载存储消除 – 使用 try catch 块加载存储消除 – 使用释放/获取操作新的内联启发式不…

LiveVIS视图库1400-如何切换数据库?默认使用的数据库是什么?如何切换到Mysql/MariaDB?

LiveVIS视图库1400-如何切换数据库?默认使用的数据库是什么?如何切换到Mysql/MariaDB? 1、切换成Mysql/Mariadb数据库1.1 连接数据库1.2 创建数据库实例1.3 配置.ini文件1.4 重启完成切换 1、切换成Mysql/Mariadb数据库 LiveVIS 默认使用 sqlite3 文件…

无需API开发,钱方QFPay连接营销系统和广告推广平台

随着电子商务市场的不断发展,企业需要集成各种业务系统,以提高业务效率和降低运营成本。钱方QFPay提供了一种创新的解决方案,帮助企业实现系统间的连接和集成,无需进行复杂的API开发。除了电商系统和客服系统,钱方还能…

PHP5.3 + Apache2.2 + Xdebug2.1.2环境并集成至PHPStrom全流程(解决使用最好的语言前的痛点问题)

文章目录 问题背景安装流程PHP安装配置PHPApache安装及配置PHPStrom集成PHP环境进行PHP开发 问题背景 由于公司陈旧项目的重新启动,现需要对该项目开发微信登录模块,本人是写 Java 的,但本着程序员终身学习、不惧新事物的特点,现…

CCFCSP试题编号:202305-2试题名称:矩阵运算

只要懂如何进行矩阵乘法就好了&#xff0c;和注意一点数的大小范围就ok了&#xff01; #include <iostream> using namespace std;const int N 10010, D 30; long long tmp[D][D], ans[N][N]; int n, d; int Q[N][D], K[N][D], V[N][D], W[N]; int main() {cin >&g…

2048 数字合成大作战,Android小游戏开发

A. 项目描述 《2048》是一款经典的益智小游戏&#xff0c;它的目标是通过合并相同数字来达到2048这个最高分。 该游戏规则简单&#xff0c;玩家需要通过滑动屏幕来移动方块&#xff0c;相同数字的方块会合并成一个新的数字方块。这样的简单操作让人可以轻松上手。 《2048》小…

室内卫星定位信号弱?——看时间服务器与GNSS模拟器如何实现区域内可靠的室内定位!

方案介绍 GNSS是当前最常用、覆盖最广泛、效率最高的定位导航技术&#xff0c;几乎各个领域都依赖它。然而&#xff0c;在室内或地下&#xff0c;GNSS信号通常非常弱甚至不可用。德思特采用时间服务器与GNSS模拟器相结合&#xff0c;提供了一种基于区域的室内定位方案。这个方…

笔尖笔帽检测4:C++实现笔尖笔帽检测算法(含源码 可是实时检测)

笔尖笔帽检测4&#xff1a;C实现笔尖笔帽检测算法(含源码 可是实时检测) 目录 笔尖笔帽检测4&#xff1a;C实现笔尖笔帽检测算法(含源码 可是实时检测) 1.项目介绍 2.笔尖笔帽关键点检测方法 (1)Top-Down(自上而下)方法 (2)Bottom-Up(自下而上)方法&#xff1a; 3.笔尖笔…

针对CSP-J/S的每日一练:Day 11

一、审题 题目描述 给定两个大小分别为 m m m 和 n n n 的正序&#xff08;从小到大&#xff09;数组 n u m s 1 nums1 nums1 和 n u m s 2 nums2 nums2。请你找出并返回这两个正序数组的中位数。 算法的时间复杂度应该为 O ( l o g ( m n ) ) O(log (mn)) O(log(mn)) 。…

7天高效处理500万件订单,母婴巨头Babycare的人效提升之路

随着出生率下降&#xff0c;新生儿人口不断减少&#xff0c;母婴市场竞争愈加激烈。与此同时&#xff0c;越来越多90后、95后成为父母&#xff0c;新的消费需求和触媒习惯让各大母婴品牌不再仅仅专注于在传统的线下零售渠道争得一席之地&#xff0c;而是逐步转型为以数字化驱动…

【腾讯云HAI】都2023年了,HAI没玩过AIGC?

:::info 腾讯云高性能应用服务(Hyper Application lnventor&#xff0c;HA)&#xff0c;是一款面向 Al、科学计算的 GPU 应用服务产品&#xff0c;为开发者量身打造的澎湃算力平台。无需复杂配置&#xff0c;便可享受即开即用的GPU云服务体验。在 HA] 中&#xff0c;根据应用智…

django(千锋教育)

创建一个django项目 官网下载python最新版本 配置到环境变量中 打开intlij编辑器 创建django项目 安装django&#xff1a;pip install django 创建django项目: django-admin startproject django01 创建djangoAPP&#xff1a;python manage.py startapp App 启动&#xff1a…

Maven项目下详细的SSM整合流程

文章目录 &#x1f389;SSM整合流程一、两个容器整合✨ 1、先准备好数据库config.properties连接、mybatis-config.xml&#x1f38a; 2、容器一&#xff1a;优先配置spring.xml文件&#x1f38a; 3、容器二&#xff1a;配置springMVC.xml文件&#x1f38a; 4、Tomcat整合spring…

具有150KHz固定频率的PWM控制降压型稳压电路芯片D2504,可兼容型号XL4001

D2504是一块具有150KHz固定频率的PWM控制降压型稳压电路&#xff0c;具有高转换效率、2A负 载能力和优异的负载调整率和电压线性度。 主要特点&#xff1a; ● 输入电压范围: 4.5~40V ● 可调输出电压: 1.235~37V ● 最小Drop电压1 5V2A ● 150K 固…

模拟火车订票系统---python序列

if __name__ __main__:#创建车辆信息列表list["车次","出发站-到达站","出发时间","到达时间","历时","余票"]trainNumber[T40,T298,Z158,Z62]address[长春-北京,长春-北京,长春-北京,长春-北京]getTime[00:12,0…

西安数字孪生赋能工业制造,加速推进制造业数字化转型

西安数字孪生、5G、工业物联网、工业互联网等新一代信息通信技术与工业制造业经济深度融合&#xff0c;通过对人、机、物、系统等全面连接&#xff0c;构建覆盖全产业链、全价值链的全新制造和服务体系&#xff0c;为工业乃至产业数字化、网络化、智能化发展提供实现途径&#…

【Linux】一篇文章教你快速上手vim

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

杰发科技AC7801——keil工程移植到IAR

0、简介 发现AC7801的代码只有keil工程的&#xff0c;IAR和Eclipse的代码只有一个例程&#xff0c;于是在从Keil移植到IAR时候遇到的问题记录下。 正常情况下&#xff0c;直接把keil的usr用户代码移植到iar的文件夹下面&#xff0c;删除原本的文件再添加新加进来的文件即可。…

COCO类别标签增加80

COCO类别标签增加80 import codecs import ospath H:/Dataset/COCO/train_pbr/000001/labels/ # 标签文件train路径 m os.listdir(path) # 读取路径下的txt文件 for n in range(0, len(m)):t codecs.open(H:/Dataset/COCO/train_pbr/000001/labels/ m[n], moder, encoding…