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

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: INFOorg.springframework.web: INFOorg.hibernate: WARNpattern: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: INFOorg.springframework.web: INFOorg.hibernate: WARNpattern: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: 配置日志文件输出路径,可以指定一个文件名或完整路径。

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

http://www.lryc.cn/news/493825.html

相关文章:

  • java虚拟机——jvm是怎么去找垃圾对象的
  • Macos远程连接Linux桌面教程;Ubuntu配置远程桌面;Mac端远程登陆Linux桌面;可能出现的问题
  • hadoop_HA高可用
  • 【MySQL】MySQL中的函数之JSON_ARRAY_APPEND
  • torch.is_nonzero(input)
  • 文本搜索程序(Qt)
  • 使用 Python 剪辑视频的播放速度
  • 深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接
  • Linux开发者的CI/CD(11)jenkins变量
  • 深度学习视频编解码开源项目介绍【持续更新】
  • Canva迁移策略深度解析:应对每日5000万素材增长,从MySQL到DynamoDB的蜕变
  • nacos常见面试题(2024)
  • 68000汇编实战01-编程基础
  • 你的网站真的安全吗?如何防止网站被攻击?
  • UE5 材质编辑器CheapContrast 节点
  • 健身房小程序服务渠道开展
  • Java基础面试题08:Java中Exception和Error有什么区别?
  • 什么是axios?怎么使用axios封装Ajax?
  • Web前端学习_CSS盒子模型
  • JAVA项目-------医院挂号系统
  • [工具分享] 根据Excel数据根据Word文档模板,批量创建生成Word文档并重命名,方便快速查找打印
  • Redis的管道操作
  • IT监控 | Oracle云监控全解析
  • 前端面试题-1(详解事件循环)
  • Redis(5):哨兵
  • 【人工智能】Transformers之Pipeline(二十五):图片特征抽取(image-feature-extraction)
  • podman 源码 5.3.1编译
  • 矩阵重新排列——rot90函数
  • Leetcode 51 N Queens Leetcode N Queens II
  • 0.查找命令