【JavaEE Spring】SpringBoot 日志

SpringBoot 日志

  • 1. 日志概述
  • 2. 日志使用
    • 2.1 打印⽇志
      • 2.1.1 在程序中得到⽇志对象
      • 2.1.2 使⽤⽇志对象打印⽇志
    • 2.2 ⽇志框架介绍
      • 2.2.1 ⻔⾯模式(外观模式)
      • 2.2.2 SLF4J 框架介绍
    • 2.3 ⽇志格式的说明
    • 2.4 ⽇志级别
      • 2.4.1 ⽇志级别的分类
      • 2.4.2 ⽇志级别的使⽤
    • 2.5 ⽇志配置
      • 2.5.1 配置⽇志级别
      • 2.5.2 ⽇志持久化
      • 2.5.3 配置⽇志⽂件分割
      • 2.5.4 配置⽇志格式
  • 3. 更简单的⽇志输出
    • 3.1 添加 lombok 依赖
    • 3.2 输出⽇志
  • 4. 总结

1. 日志概述

为什么要学习日志

  • 对于平常来说, 我们就在使⽤ System.out.print 来打印⽇志了
  • 随着项⽬的复杂度提升, 我们对⽇志的打印也有了更⾼的需求, ⽽不仅仅是定位排查问题.
  • 有时候我们需要将日志持久化, 进行对应的数据分析, 但是 System.out.print 不能很好的满⾜我们的需求, 我们就需要使⽤⼀些专⻔⽇志框架(专业的事情交给专业的⼈去做).

日志的用途
通过前⾯的学习, 我们知道⽇志主要是为了发现问题, 分析问题, 定位问题的, 但除此之外, ⽇志还有很多⽤途

  1. 系统监控
  2. 数据采集
  3. ⽇志审计

2. 日志使用

Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所⽰:
在这里插入图片描述
SpringBoot 内置了⽇志框架 Slf4j , 我们可以直接在程序中调⽤ Slf4j 来输出⽇志

2.1 打印⽇志

打印⽇志的步骤:

  • 在程序中得到⽇志对象.
  • 使⽤⽇志对象输出要打印的内容.

2.1.1 在程序中得到⽇志对象

在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory,如下代码所⽰:

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

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

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

2.1.2 使⽤⽇志对象打印⽇志

⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志,如下代码所⽰:
在这里插入图片描述
在这里插入图片描述

2.2 ⽇志框架介绍

在这里插入图片描述

2.2.1 ⻔⾯模式(外观模式)

SLF4J是⻔⾯模式的典型应⽤(但不仅仅使⽤了⻔⾯模式).

⻔⾯模式定义
门面模式又称为外观模式, 提供了一个统一接口, 用来访问子系统中的一群接口, 其主要特征是定义了一个高层接口, 让子系统更容易使用.在这里插入图片描述
⻔⾯模式主要包含2种⻆⾊:

  • 外观⻆⾊(Facade): 也称⻔⾯⻆⾊,系统对外的统⼀接⼝.
  • ⼦系统⻆⾊(SubSystem): 可以同时有⼀个或多个 SubSystem. 每个 SubSytem 都不是⼀个单独的类,⽽是⼀个类的集合. SubSystem 并不知道 Facade 的存在, 对于 SubSystem ⽽⾔, Facade 只是另⼀个客⼾端⽽已(即 Facade 对 SubSystem 透明)

⻔⾯模式的实现

场景: 回家, 我们会开各个屋的灯. 离开家时, 会关闭各个屋的灯

如果家⾥设置⼀个总开关, 来控制整个屋的灯就会很⽅便

我们使⽤⻔⾯模式的实现
在这里插入图片描述
⻔⾯模式的优点

  • 减少了系统的相互依赖. 实现了客户端与子系统的耦合关系, 这使得子系统的变化不会影响到调用它的客户端;
  • 提高了灵活性, 简化了客户端对子系统的使用难度, 客户端无需关心子系统的具体实现方式, 而需要和门面对象交互即可.
  • 提高了安全性, 可以灵活设定访问权限, 不在门面对象中开通方法, 就无法访问

2.2.2 SLF4J 框架介绍

SLF4J 就是其他⽇志框架的⻔⾯. SLF4J 可以理解为是提供⽇志服务的统⼀API接⼝, 并不涉及到具体的⽇志逻辑实现.
不引⼊⽇志⻔⾯
在这里插入图片描述
引⼊⽇志⻔⾯
在这里插入图片描述
总的来说,SLF4J使你的代码独⽴于任意⼀个特定的⽇志API,这是⼀个对于开发API的开发者很好的思想.

2.3 ⽇志格式的说明

在这里插入图片描述
从上图可以看到,⽇志输出内容元素具体如下:

  1. 时间⽇期:精确到毫秒
  2. ⽇志级别:ERROR, WARN, INFO, DEBUG 或TRACE
  3. 进程ID
  4. 线程名
  5. Logger名(通常使⽤源代码的类名)
  6. ⽇志内容

2.4 ⽇志级别

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

2.4.1 ⽇志级别的分类

⽇志的级别从⾼到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE在这里插入图片描述
在这里插入图片描述

2.4.2 ⽇志级别的使⽤

⽇志级别是开发⼈员⾃⼰设置的. 开发⼈员根据⾃⼰的理解来判断该信息的重要程度在这里插入图片描述

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

观察打印的⽇志结果:
在这里插入图片描述
结果发现, 只打印了info, warn和error级别的⽇志

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

2.5 ⽇志配置

上述是⽇志的使⽤, ⽇志框架⽀持我们更灵活的输出⽇志, 包括内容, 格式等.

2.5.1 配置⽇志级别

⽇志级别配置只需要在配置⽂件中设置"logging.level"配置项即可,如下所⽰:在这里插入图片描述
在这里插入图片描述

2.5.2 ⽇志持久化

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

⽇志持久化有两种⽅式

  1. 配置⽇志⽂件名
  2. 配置⽇志的存储⽬录

在这里插入图片描述
配置⽇志⽂件的路径和⽂件名:
在这里插入图片描述

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

运⾏结果显⽰, ⽇志内容保存在了对应的⽬录下在这里插入图片描述
注意:
logging.file.namelogging.file.path 两个都配置的情况下, 只⽣效其⼀, 以
logging.file.name 为准.

2.5.3 配置⽇志⽂件分割

如果我们的⽇志都放在⼀个⽂件中, 随着项⽬的运⾏, ⽇志⽂件会越来越⼤, 需要对⽇志⽂件进⾏分割.

当然, ⽇志框架也帮我们考虑到了这⼀点, 所以如果不进⾏配置, 就⾛⾃动配置
默认⽇志⽂件超过10M就进⾏分割

在这里插入图片描述

配置⽇志⽂件分割:
在这里插入图片描述

  1. ⽇志⽂件超过1KB就分割(设置1KB是为了更好展⽰. 企业开发通常设置为200M, 500M等, 此处没有明确标准)
  2. 分割后的⽇志⽂件名为: ⽇志名.⽇期.索引

项⽬运⾏, 多打印⼀些⽇志, ⽇志分割结果:
在这里插入图片描述

2.5.4 配置⽇志格式

⽬前⽇志打印的格式是默认的在这里插入图片描述

3. 更简单的⽇志输出

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

  1. 添加 lombok 框架⽀持
  2. 使⽤ @Slf4j 注解输出⽇志。

3.1 添加 lombok 依赖

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

3.2 输出⽇志

在这里插入图片描述

4. 总结

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

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

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

相关文章

Qt打包成为exe遇到的问题及其解决方法

Qt打包成为exe遇到的问题及其解决方法 文章目录 Qt打包成为exe遇到的问题及其解决方法0. 前言1. 使用Release编译工程2. 利用windeployqt工具来找出和复制依赖项3. 解决 Qt Location /Qt Positioning is not installed4. 利用Enigma virtual box打包 .exe程序5. dependency wal…

sfml使用opengl着色器实现2d水面波浪

SFML中使用GLSL着色器来绘制水波。 效果 代码 #include <SFML/Graphics.hpp> #include <iostream>int main() {const int WIDTH = 800;

Mysql 编译安装部署

Mysql 编译安装部署 环境&#xff1a; 172.20.26.198&#xff08;Centos7.6&#xff09; 源码安装Mysql-5.7 大概步骤如下&#xff1a; 1、上传mysql-5.7.28.tar.gz 、boost_1_59_0.tar 到/usr/src 目录下 2、安装依赖 3、cmake 4、make && make install 5、…

springboot配置项动态刷新

文章目录 一&#xff0c;序言二&#xff0c;准备工作1. pom.xml引入组件2. 配置文件示例 三&#xff0c;自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四&#xff0c;yaml文件转换为java对象1. 无法使…

[陇剑杯 2021]webshell

[陇剑杯 2021]webshell 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;单位网站被黑客挂马&#xff0c;请您从流量中分析出webshell&#xff0c;进行回答&#xff1a; 黑客登录系统使用的密码是_____________。 题目思路&#xff1a; 分析题目&…

《Aspect-Sentiment-Multiple-Opinion Triplet Extraction》论文阅读

文章目录 文章介绍文章模型encoder部分ATE任务TOWE任务ATSA任务 番外 文章地址&#xff1a; https://arxiv.org/abs/2110.07303v1 文章介绍 目前的关于ASTE三元组提取的方面级情感分析论文大多关注于简单的句式&#xff0c;比如一个方面实体仅有一个意见词加以修饰&#xff0c…

【计算机网络】TCP握手与挥手:三步奏和四步曲

这里写目录标题 前言三次握手四次挥手三次握手和四次挥手的作用TCP三次握手的作用建立连接防止已失效的连接请求建立连接防止重复连接 TCP四次挥手的作用&#xff1a;安全关闭连接避免数据丢失避免半开连接 总结&#xff1a; 总结 前言 TCP&#xff08;传输控制协议&#xff09…

新 Java 与旧 Java 不同的 11 个原因

Java 已经很古老了吗&#xff1f;那些喋喋不休地谈论闪烁着灯光的前面板和软盘时代的老人们所使用的编程语言&#xff1f;或者它仍然很时尚&#xff0c;拥有所有最新的语言增强功能&#xff0c;可实现直观的编码和一流的性能&#xff1f;也许 Java 介于两者之间&#xff1a;一种…

二维码巡检系统开发及部署

** 凡尔码二维码巡检系统**是一种低代码平台&#xff1b;用户可通过平台开发好的组件像搭积木一般灵活搭建巡检管理平台和无纸化记录应用场景。 ** 凡尔码平台功能**组件&#xff1a;二维码管理、表单管理、流程管理、计划管理、权限管理、隐患管理、区域管理、记录管理、任务…

vue3+vite:封装Svg组件

前言 在项目开发过程中&#xff0c;以svg图片引入时&#xff0c;会遇到当hover态时图片颜色修改的场景&#xff0c;我们可能需要去引入另一张不同颜色的svg图片&#xff0c;或者用css方式修改&#xff0c;为了方便这种情况&#xff0c;需要封装svg组件来自定义宽高和颜色&…

(3)【Python数据分析进阶】Machine-Learning模型与算法应用-线性回归与逻辑回归

目录 一、Linear Regression线性回归应用 应用案例&#xff08;一&#xff09;——自定义数据&#xff08;Custom data&#xff09; 1、下载安装sklearn库 2、导入库函数 3、加载数据集 4、创建线性回归对象 5、模型训练 6、预测结果 7、绘制模型图像 8、应用模型进行…

Python小项目:还在为备份烦恼?这个tkinter项目帮你解决!

文章目录 1 引言2 Tkinter概览3 设计备份软件的界面4 文件夹选择逻辑5 备份方案介绍5.1 完全备份5.2 增量备份5.3 镜像备份 完整代码&#xff1a; import tkinter as tk from tkinter import filedialog, messagebox import os import shutil import filecmpdef choose_source(…

【K8S 云原生】K8S的对外服务—ingress

目录 一、K8S的Service 1、Service的作用 2、Service类型&#xff1a; 二、ingress 1、ingress的组成&#xff1a; 2、ingress资源的定义项&#xff1a; 三、nginx-ingress-controller暴露服务端的方式 1、DeploymentLoadBalancer模式&#xff1a; 1、工作流程图&…

vector讲解

在学习玩string后我们开始学习vector&#xff0c;本篇博客将对vector进行简单的介绍&#xff0c;还会对vector一些常用的函数进行讲解 vector的介绍 实际上vector就是一个数组的数据结构&#xff0c;但是vector是由C编写而成的&#xff0c;他和数组也有本质上的区别&#xff…

pandas操作excel

目录 一&#xff1a;创建excel 二&#xff1a;修改excel 三&#xff1a;查找excel 四&#xff1a;删除数据 五&#xff1a;合并excel数据 一&#xff1a;创建excel import pandas as pd # 创建DataFrame对象 data { Name: [Alice, Bob, Charlie], Age: [25, 30, 35], S…

ISA Server 2006部署网站对比nginx

2024年了&#xff0c;我还是第1次使用ISA Server 。没办法在维护一个非常古老的项目。说到ISA Server可能有小伙们不清楚&#xff0c;但是说到nginx大家应该都知道吧。虽然他们俩定位并不相同&#xff0c;但是本文中提到的需求&#xff0c;他俩是都可以实现。 网上找的到的教程…

力扣:(692. 前K个高频单词)

题目1&#xff1a; 题目链接 思路1&#xff1a;首先可以使用map来统计单词出现的次数。然后使用vector将pair存起来&#xff0c;接着使用stable_sort排序(要保证数据具有稳定性)&#xff0c;然后返回前k个单词即可。 难点&#xff1a;需要写一个比较函数&#xff08;仿函数&am…

SAP S/4HANA 2023 Fully-Activated Appliance 虚拟机版介绍

注&#xff1a;市面上所有在售虚拟机均为拷贝本人所作的虚拟机&#xff0c;存在各种技术问题&#xff0c;请知悉。 SAP S4HANA 2023 FAA版本内置了四个Client&#xff1a; 1、000&#xff1a;SAP初始Client&#xff0c;原则上不能动&#xff1b; 2、100&#xff1a;只激活了US…

java SSM网上小卖部管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM网上小卖部管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源 代码和数据库&#xff0c;系统主要…

【Docker篇】详细讲解容器相关命令

&#x1f38a;专栏【Docker】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f6f8;容器&#x1f339;相关命令&#x1f354;案例⭐创建并运…