Spring Boot 日志文件有什么用

news2024/11/27 8:48:13

目录

一、自定义打印日志

1.1 日志框架说明

1.2 实现自定义打印日志

1.3 日志的格式说明

2.1 日志的级别

2.2 设置日志级别的作用:

2.3 如何设置日志的级别

二、 日志的持久化

3.1 设置日志保存路径  (在 .yml 配置文件中设置日志保存路径)

3.2 设置指定日志文件名称

3.3 日志如何进行清理

三、更简单的日志输出 -- Lombok

4.1 使用注解:@Slf4j


前言

    日志是一个程序必不可少的部分,如果程序在运行的过程中报错了,此时可以通过记录错误日志和警告日志 快速的定位问题并且找到问题原因。

    日志除了定位问题之外,还有以下功能:

  • 记录用户登录日志,方便分析用户是正常登录还是非法用户恶意破解
  • 记录系统的操作日志,方便数据恢复和定位操作人
  • 记录程序执行时间,方便程序在未来的优化,为其提供数据支持

一、自定义打印日志

当启动一个 Spring Boot 项目时,默认就有日志的输出,如下图:

     上图就是 Spring Boot 输出的控制台的信息,所以,Spring Boot 中内置了日志框架,否则不会输出日志,并且输出的日志不是程序猿打印的,如何自定义打印日志;最后:默认是显示在控制台上的,如果项目重启了,此时日志也就消失了,那如何将日志进行持久化方便开发人员去查找呢?

1.1 日志框架说明

    日志框架也是有很多种的,JUL,log4j... 每个日志的框架实现的方式都是不一样的,所以如果每个日志框架都要系统的学习,成本就很高,因此为了减少开发过程中的学习成本,此时就引入了日志门面:SLF4J。

    和JDBC 编程是一样的,当有很多套规范的时候,各种数据库连接就麻烦了很多,需要学习不同数据库提供的不同的接口,学习成本很高,此时就引入了 JDBC 编程 去对接不同的数据库的接口,最后程序猿只需要学习 JDBC 编程之后就可以连接到不同的数据库;SLF4J也是同样的,日志的框架有很多,最后只需要学习 SLF4J 就可以对接到不同的日志框架了,相当于是一个总的接口。

1.2 实现自定义打印日志

1. 得到日志对象

    private static final Logger log =
            LoggerFactory.getLogger(TextController.class);

注:(1)Logger 对象是 SLF4J提供的对象,导包时需要                   注意.

      (2)Logger 对象的参数可以是一个类对象,也可以是一个类名(不推荐类名),如果参数是一个类名,打印日志时只会显示类名,如果同一包下有相同的类名,此时的日志信息中就无法区分多个同名的类

2. 使用日志提供的方法打印日志

下图代码所示:

        log.trace("i'm trace");//所有执行的痕迹都打印
        log.debug("i'm debug");//调试的时候打印
        log.info("i'm info");//普通日志,默认就是这个级别
        log.warn("i'm warn");//警告日志
        
        log.error("i'm error");//错误日志

运行结果:

    注:上述的结果是已经设置了日志的级别了,默认的级别是info,所以这个级别以下的日志打印信息,在默认情况下是不会进行打印的,只会输出info以上的级别。

 1.3 日志的格式说明

    可以看到上述日志打印的格式: 时间,级别,线程信息,日志打印的所在类,(在上述创建一个日志对象时传参了一个类对象,此时在打印时就可以拿到这个类)   日志的打印信息

 2.1 日志的级别

(1)trace:痕迹,微量,级别最低,设置后几乎所有的日志信息都会进行打印
(2)debug:开发环境中常用;需要调试时打印的关键信息
(3)info:普通日志的打印,日志的默认级别
(4)error:级别较高,错误的日志打印的信息

(5)fatal:致命的,因代码异常导致程序崩溃时会打印此日志

(注:只会在整个程序都异常时才会打印这个级别,否则默认也是不会打印这个日志的

     日志级别的顺序:

2.2 设置日志级别的作用:

(1)帮开发人员筛选重要的信息,例如:设置级别为 error,此时就可以只关注程序的报错打印的日志了,对于普通的日志和日常的业务中打印的日志可以忽略,更高效的帮助开发人员快速的定位程序的问题。
(2)可以控制在不同的环境下是否需要打印日志,例如:在开发环境中,需要详细的打印日志的调试信息,但是在生产环境中,需要保证性能和安全性就应当尽量减少日志的输出,而开发的调试打印日志就造成了数据污染,所以可以通过设置日志的级别,以控制不同环境中是否需要打印日志。

2.3 如何设置日志的级别

    设置日志的级别是在配置文件中设置,此处演示在 yml 配置文件中如何设置日志的级别。

    日志级别的设置是非常灵活的,可以精确到某一个子文件夹中的某一个类,如下代码:

#  日志级别的设置
logging:
  level:
    root: error #将根目录下的文件夹设置error级别
    com:
      example:
        demo:
          controller: trace   #单独将

    上述设置日志信息打印就是将根目录(root)目录下的文件设置为 error级别的,然后将 demo 包下的 controller 类设置成 trace 级别的(所有的日志信息都打印)

    运行结果:

     可以看到 Spring Boot 项目的启动日志并没有打印(包括端口号和项目启动时间),因为在上述配置文件中已经设置了 root 路径下的所有包下的 日志打印级别为 error,项目的启动日志也是包含在这个包中的,所以 error 以下级别的日志不会进行打印。

    但是在访问 sayHi 方法之后,可以看到 Controller 这个类的所有日志的信息全部都打印了,是因为上述配置文件中的 Controller 类中的日志打印级别为 trace。

二、 日志的持久化

    持久化很常见,在数据库中介绍过 作用就是将数据持久化,io操作中也提到将数据写入文件 也是对数据持久化,日志的持久化也是一样的,就是将日志的信息保存下来,之后方便开发人员查看并定位问题。

3.1 设置日志保存路径  (在 .yml 配置文件中设置日志保存路径)

# 日志保存路径(1. 尽量不要保存在 系统盘(C盘)) (2. 路径中不要出现中文)
logging:
  file:
    path: D:\home   #此时只需要将路径写上即可 不用设置目录名,会自动生成名录名的

在 项目启动之后,可以在对应目录中查看是否有日志文件

 访问 sayHi 方法后,可以查看是否会有日志信息覆盖原来的 日志信息:

     首先并没有创建新的日志文件,可以看到原来的日志并没有消失,后来新的日志是在原来的基础上进行了追加操作。

3.2 设置指定日志文件名称

# 日志保存路径(1. 尽量不要保存在 系统盘(C盘)) (2. 路径中不要出现中文)
logging:
  file:
    name: D:\\home\\springBoot.log   
    #此时可以设置写入特定文件,可以包含指定目录,也可以不指定目录,
    #如果不指定特定目录,创建日志文件是和项目在同一级目录下

     运行结果:

 3.3 日志如何进行清理

     查看 Spring Boot 更多系统配置项,访问官网:https://docs.spring.io/springboot/docs/current/reference/html/application-properties.html#application-properties

可以点击上述网址查看更多配置,可以看到日志文件可以设置最大日志文件大小:

    还有如果超出指定文件大小之后需要重新创建日志文件,那文件名是如何命名的;

    会有指定的文件名的格式来区分 日志文件的日期的,如:在文件名之后 + 数字的形式或者日期的形式来区分 很多的日志文件。

    所以如果日志文件过了很长时间之后,如果没用了就可以删除了。

三、更简单的日志输出 -- Lombok

    在打印日志时每次都需要创建一个日志对象,而且是每个类都要添加一个日志对象,很繁琐,因此有一种更简单的方式实现日志的打印:使用注解 -- @Slf4j 。

4.1 使用注解:@Slf4j

如果在创建 Spring Boot 项目时,起步依赖没有添加 Lombok,此时可以先安装一个插件:

     之后在pom.xml 中添加依赖:

     使用注解方式创建日志对象:

 

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

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

相关文章

一、二维前缀和算法

文章目录 前缀和模板724. 寻找数组的中心下标238. 除自身以外数组的乘积560. 和为 K 的子数组974. 和可被 K 整除的子数组525. 连续数组1314. 矩阵区域和 前缀和模板 一维前缀和: import java.util.*;public class Main {public static void main(String[] args) …

docker-compose启动minio

一、创建文件夹 mkdir -p /docker/stand-alone-minio/data mkdir -p /docker/stand-alone-minio/configchmod 777 -R /docker/stand-alone-minio/data chmod 777 -R /docker/stand-alone-minio/config 二、docker-compose.yml version: 3.9services:minio:image: minio/mini…

【Vue3基础】计算属性

一、需求 二、代码 1、创建项目 创建项目: 1、 npm init vuelatest 2、一路回车 3、输入项目名,不要大写,如vue3bilibili 4、 cd vue3bilibili 5、 npm install 6、npm run dev启动,可以获取网址 2、App.vue文件中:…

UNIX网络编程卷一 学习笔记 第二十五章 信号驱动式IO

信号驱动式IO指进程预先告知内核,当某个描述符上发生某事时,内核使用信号通知相关进程,它在历史上曾被称为异步IO,但信号驱动式IO不是真正的异步IO,真正的异步IO通常定义为进程执行IO系统调用告知内核启动某个IO操作&a…

Kafka-partition和消费者的关系

Kafka-partition 目录概述需求: 设计思路实现思路分析1.Kafka-partition2.消费者数量小于分区数量3. 拓展实现 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a…

五笔打字练习经验总结

背景 我之前对键盘不太熟悉,打字的速度我测了一下大概是在30/m的样子,于是想提高自己的打字速度,就练习了下,现在大概到了60/m。由于自己打字拼音打字错误率较高,因为手指键位练习不到位,已经很难纠正了。所…

LeetCode[148]排序链表

难度:Medium 题目: 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出&…

IOR的安装及使用

简介 IOR 是一种并行 IO 基准测试,可用于测试使用各种接口和访问模式的并行存储系统的性能。IOR存储库还包括mdtest基准测试,专门测试不同目录结构下存储系统的峰值元数据速率。两个基准测试都使用通用并行 I/O 抽象后端,并依赖 MPI 进行同步…

Vue复选框、下拉框使用案例,复选框选项元素(el-checkbox)换行竖向显示

一、复选框 1、<el-checkbox-group></el-checkbox-group>的选项元素默认是行横向显示 <el-checkbox-groupv-model"additionalPermissionsParams.permissionList"change"permissionChange($event)"><el-checkbox label"10"…

c++学习(红黑树)[20]

概念 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉搜索树&#xff0c;它在插入和删除节点时通过一系列的旋转和重新着色操作来保持树的平衡。红黑树的平衡性质使得它在插入、删除和查找等操作上具有较好的性能。 红黑树具有以下特点&#xff1a; 每个节…

【项目开发】商城 - 三级分类 - 简单笔记

目录标题 后端业务类实体类 前端最终实现效果排序变化批量删除 后端 业务类 // 省略其他简单的CRUDOverridepublic List<CategoryEntity> listWithTree() {// 1、查出所有分类List<CategoryEntity> list baseMapper.selectList(null);// 2. 找出所有的一级分类Li…

NOAA官网下载的气象雷达原始数据转化为NC文件详细步骤

一、准备工作 1.先在NOAA官网下载好气象雷达原始数据 NOAA官网下载气象雷达资料详细步骤_珞瑜的博客-CSDN博客 下载好的雷达数据有两种类型Level-2和Level-3。 如上图所示,为气象雷达数据的Level-2产品,站点名字:K

springboot mybatis-plus 多数据源配置(HikariCP)

1.导入依赖jar <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgres…

iOS--虚拟内存

参考文章 要想了解什么是VM Regions&#xff0c;就得先了解什么是虚拟内存。当我们向系统申请内存时&#xff0c;系统并不会给你返回物理内存的地址&#xff0c;而是给你一个虚拟内存地址。每个进程都拥有相同大小的虚拟地址空间&#xff0c;对于32位的进程&#xff0c;可以拥有…

【N32L40X】学习笔记06-串口dma空闲中断+dma接收数据

串口dma 8 个可独立配置的 DMA 通道。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VchCudlf-1689952378831)(./picture/dma.png)] 实例代码 串口dma使用的是串口绑定方式实现串口的dma数据传输 bsp_uart_dma.h #ifndef _BSP_UART_DMA_H_ #def…

STM32(HAL库)驱动(1.44寸)TFT-LCD彩屏

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 屏幕引脚配置 2.3 项目生成 3、KEIL端程序整合 3.1 LCD驱动添加 3.2 函数修改 3.2.1 lcd.h修改 3.2.2 lcd_innit.h 修改 3.2.3 lcd.c修改 3.2.4 lcd_inut.c修改 3.3 主函数代码 3.3…

网络安全(零基础)自学

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识&#xff0c;可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题&#xff0c;可以帮助您更好地解决网络安全的原理和技术…

Spring Cloud Alibaba 集成 Skywalking 链路追踪

Spring Cloud Alibaba 集成 Skywalking 链路追踪 简介 skywalking 是一个国产开源框架&#xff0c;2015 年由吴晟开源 &#xff0c; 2017 年加入 Apache 孵化器。skywalking 是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Doc…

前端 | ( 十)HTML5简介及相关新增属性 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 文章目录 &#x1f4da;HTML5简介&#x1f407;什么是HTML5&#x1f407;HTML5 优势&#x1f407;HTML5兼容性 &#x1f4da;新增语义化标签&#x1f407;新增布局标签&#x1f407…

怎样原生制作lis的CentOS容器镜像

本文介绍从一个空白的裸机CentOS自己构造检验允许的docker环境。来达到运行环境的高度定制&#xff0c;而不是只能依赖VS或者微软或者数据库厂商提供的镜像当做基础制作。更容易理解基础原理。最终输出产物为lisnew.tar&#xff0c;一个开箱即用的lis运行环境。 制作的整个过程…