SpringBoot小知识(2):日志

日志是开发项目中非常重要的一个环节,它是程序员在检查程序运行的手段之一。

1.日志的基础操作

1.1 日志的作用

  1. 编程期调试代码
  2. 运营期记录信息:
    * 记录日常运营重要信息(峰值流量、平均响应时长……)
    * 记录应用报错信息(错误堆栈)
    * 记录运维过程数据(扩容、宕机、报警……)

1.2 日志级别

在这里插入图片描述
使用方式:
在这里插入图片描述

2.快速开发日志对象

2.1 日志门面库

日志门面库是一种软件设计模式,它为多种不同的日志记录框架提供一个统一的接口或抽象层。这种模式允许开发者使用一个通用的API来编写日志记录代码,而不必直接依赖于任何特定的日志框架实现。

看到这里有很多人可能看不明白,我们用人话讲一下,日志记录框架就是我们经常用到的logback或者log4j,各种类型的日志记录框架应用场景不同,可能开发时候你用到的框架不满足线上的要求,那你此时就需要更换日志记录框架,而如果你使用了日志门面库,此时你只需要如下操作:

  1. 在开发阶段,你可以选择一个日志实现(如logback),并通过添加相应的依赖和配置文件(如logback.xml)来配置它。
  2. 切换日志实现:如果你需要更换为另一个日志实现(如log4j),你只需做以下几步:
    • 移除当前日志实现(logback)的依赖和配置文件。
    • 添加新日志实现(log4j)的依赖和配置文件(如log4j.properties或log4j.xml)。
    • 无需修改代码中使用日志门面库API的任何部分。

2.2 日志实现

日志记录框架是用于记录和管理系统操作事件的软件组件。它们帮助开发者在程序运行时捕获、存储和分析日志信息,这对于调试、监控和审计系统行为至关重要。以下是一些主流的日志记录框架及其特点,他有如下实现:

  • Logback:由Log4j的原开发者之一主导开发,是Spring Boot默认的日志框架,轻量级且性能优秀,功能全面。
  • Log4j:一个非常老牌的日志框架,功能强大,可以自定义日志级别、输出格式和目的地等。
  • Log4j2:Log4j的升级版,性能和功能上都有所提升,支持异步日志和插件机制。
  • JUL(Java Util Logging):Java SE的默认日志框架,功能相对基础,但对于简单的日志需求来说足够用。

2.3 SLF4J

SLF4J是一个Java日志门面库,它提供了一个简单而统一的API来记录日志,同时允许最终用户在部署他们的应用程序时插入所需的日志框架。简而言之,SLF4J定义了一个日志记录的接口,然后通过桥接与其他具体的日志框架(如logback、log4j等)进行集成,使得开发者可以在代码中使用SLF4J API,而具体的日志实现则可以在部署时决定。

SLF4J的主要特点包括:

  • 简单性:SLF4J提供了一个简单直观的API,使得日志记录变得容易。
  • 解耦:由于SLF4J是一个门面,它允许开发者在不了解具体日志实现的情况下编写代码,这使得代码与具体的日志框架解耦。
  • 灵活性:开发者可以在运行时选择使用哪种日志系统,例如logback、log4j、java.util.logging等。
  • 性能:SLF4J的API设计注重性能,特别是在参数较多的情况下,它允许延迟参数计算,直到日志级别真正启用时才计算参数值。
  • 兼容性:SLF4J支持与多种日志框架的桥接,这意味着你可以在项目中轻松切换不同的日志系统。
  • 线程安全:SLF4J是线程安全的,可以在多线程环境中使用。

使用SLF4J的基本步骤:

  1. 添加依赖:在项目的构建配置中添加SLF4J的依赖。
  2. 配置日志系统:选择并配置一个日志系统,如logback或log4j。
  3. 编写代码:在代码中使用SLF4J提供的API来记录日志。
  4. 运行和部署:在部署时,根据需要选择和配置具体的日志实现。

示例代码:
Controller层添加slf4j的注解(lombok提供),即可在相应的Controller方法中使用log.调用API
在这里插入图片描述

在这里插入图片描述

它由loggerFactory方法获取到:
在这里插入图片描述

他有如下方法:
在这里插入图片描述

3. 日志的信息

3.1 日志的格式

一个标准的,springboot默认的日志格式输出信息如下:
在这里插入图片描述
我们也可以自定义设置日志的输出格式,例如可能有的人不想显示PID的信息,只想知道时间,级别和日志信息,我们就可以手动调整。

logging:
  level:
    root: INFO
    org.springframework.web: INFO
    org.hibernate: WARN
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n%throwable"

属性解释:

  • logging.level: 配置日志级别。这里设置了根日志级别为INFO,并为特定的包(如org.springframework.web和org.hibernate)设置了不同的日志级别。
  • logging.pattern.console: 配置控制台日志输出格式,格式可以包含:
    * %d{yyyy-MM-dd HH:mm:ss}:日志时间戳
    * %-5level:日志级别(INFO、DEBUG等),宽度为5
    * [%thread]:线程名称
    * %logger{36}:日志记录器的名称(通常是类的名称),最多显示36个字符
    * %msg:日志消息
    * %n:换行
    * %throwable:异常堆栈

3.2 输出日志

在配置中我们可以添加file属性来设置输出日志的格式以及位置

logging:
  level:
    root: INFO
    org.springframework.web: INFO
    org.hibernate: WARN
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n%throwable"
    file: "%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n%throwable"
  file:
    name: info.log  # 设置日志输出文件路径

  • logging.pattern.file: 配置日志文件的输出格式,使用相同的格式。
  • logging.file.name: 配置日志文件输出路径,可以指定一个文件名或完整路径。

那么这个文件在哪呢?就在你的项目文件里面,打开就能看到
在这里插入图片描述
我重启了几次项目,看看记录的信息:
在这里插入图片描述

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

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

相关文章

传输控制协议(TCP)

传输控制协议是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。 1、TCP报文段结构 注:TCP默认采用累积确认机制。 2、三次握手、四次挥手 (1)当客户向服务器发送完最后一个数据段后,发送一个FIN段…

输出保留3位小数的浮点数

输出保留3位小数的浮点数 C语言代码C代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 读入一个单精度浮点数,保留3位小数输出这个浮点数。 输入 只有一行,一个单精度浮点数。 输出 也只有一…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网,查看 RabbitMQ 需要的 Erlang 支持:https://www.rabbitmq.com/ 进入官网,在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …

【竞技宝】CS2-上海major:MongoLZ成为亚洲之光

北京时间2024年12月1日,上海major在昨日正式拉开比赛序幕,首日第六轮迎来MongolZ对阵MIBR、COL对阵PUA。以下是本轮比赛的详细战报。 MongoLz 13-6 MIBR(比赛地图:远古遗迹) 上半场,MongoLz先做进攻方。手枪局,MongoLz抱团进攻遭遇MIBR重防被接连秒掉三人,然而在5V2的残局中,M…

【绘图】数据可视化(python)

对于数据绝对值差异较大(数据离散) 1. 对数坐标直方图(Histogram with Log Scale) import pandas as pd import matplotlib.pyplot as plt import numpy as np# 示例数据 data {count: [10, 20, 55, 90, 15, 5, 45, 80, 1000, …

MySQL - Why Do We Need a Thread Pool? - mysql8.0

MySQL - Why Do We Need a Thread Pool? - mysql8.0 本文主要由于上次写的感觉又长又臭, 感觉学习方法有问题, 我们这次直接找来了 thread pool 的原文,一起来看看官方的开发者给出的blog – 感觉是个大神 但是好像不是最官方的 &#xff0c…

【JS】栈内存、堆内存、事件机制区别

js中,内存主要分为两种类型:栈内存(stack)、堆内存(heap),两种内存区域在存储和管理数据时有各自的特点和用途。 栈内存 访问顺序 栈是先进后出、后进先出的数据结构,栈内存是内存用…

glog在vs2022 hello world中使用

准备工作 设置dns为阿里云dns 223.5.5.5,下载cmake,vs2022,git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…

20241127 给typecho文章编辑附件 添加视频 图片预览

Typecho在写文章时,如果一次性上传太多张图片可能分不清哪张,因为附件没有略缩图,无法实时阅览图片,给文章插入图片时很不方便。 编辑admin/file-upload.php 大约十八行的位置 一个while 循环里面,这是在进行html元素更新操作,在合…

重生之我在异世界学编程之C语言:二维数组篇

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一 二维数组的创建1. 二维数组的…

Tree搜索二叉树、map和set_数据结构

数据结构专栏 如烟花般绚烂却又稍纵即逝的个人主页 本章讲述数据结构中搜索二叉树与HashMap的学习,感谢大家的支持!欢迎大家踊跃评论,感谢大佬们的支持! 目录 搜索二叉树的概念二叉树搜索模拟实现搜索二叉树查找搜索二叉树插入搜索二叉树删除…

分离整数的各个数

分离整数的各个数 C语言代码C 语言代码Java语言代码Python语言代码 💐The Begin💐点点关注,收藏不迷路💐 给定一个整数,要求从个位开始分离出它的每一位数字。 输入 输入一个整数,整数在1到100000000之间…

OpenAI Whisper 语音识别 模型部署及接口封装

环境配置: 一、安装依赖: pip install -U openai-whisper 或者,以下命令会从这个存储库拉取并安装最新的提交,以及其Python依赖项: pip install githttps://github.com/openai/whisper.git 二、安装ffmpeg: cd …

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕 设置使用下载地址 设置 使用 下载地址 https://www.videohelp.com/software/PotPlayer

第33周:运动鞋识别(Tensorflow实战第五周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 1.3 查看数据 二、数据预处理 2.1 加载数据 2.2 可视化数据 2.3 再次检查数据 2.4 配置数据集 2.4.1 基本概念介绍 2.4.2 代码完成 三、构建CNN网络 四、训练模型 4.1 设置动态学习率 4.2 早停与保存最佳模型…

云轴科技ZStack助力 “上科大智慧校园信创云平台”入选上海市2024年优秀信创解决方案

近日,为激发创新活⼒,促进信创⾏业⾼质量发展,由上海市经济信息化委会同上海市委网信办、上海市密码管理局、上海市国资委等主办的“2024年上海市优秀信创解决方案”征集遴选活动圆满落幕。云轴科技ZStack支持的“上科大智慧校园信创云平台”…

Linux 服务器使用指南:诞生与演进以及版本(一)

一、引言 在当今信息技术的浪潮中,Linux 操作系统无疑是一个关键的支柱😎。无论是在服务器管理、软件开发还是大数据处理领域,Linux 都以其卓越的适应性和优势脱颖而出👍。然而,对于许多新手而言,Linux 系统…

基于树莓派3B+的简易智能家居小项目(WiringPi库 + C语言开发)

github主页:https://github.com/snqx-lqh 本项目github地址:https://github.com/snqx-lqh/RaspberryPiSmartHome 硬件开源地址:https://oshwhub.com/from_zero/shu-mei-pai-kuo-zhan-ban 欢迎交流 树莓派智能家居项目,学习树莓派的…

YOLOv8-Pose NCNN安卓部署

YOLOv8-Pose NCNN安卓部署 前言 YOLOv8-Pose NCNN安卓部署 目前的帧率可以稳定在30帧左右,下面是这个项目的github地址:https://github.com/gaoxumustwin/ncnn-android-yolov8-pose 介绍 在做YOLOv8-Pose NCNN安卓部署的时候,在github上…

【热门主题】000077 物联网智能项目:开启智能未来的钥匙

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…