SpringBoot的日志级别你了解吗(自定义打印日志)?

1 SpringBoot日志介绍

⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗? 如果是简单的错误有可能找出来,但是对于开发中的大多数错误还是需要我们打开日志来发现和定位问题的。
springboot项目在启动的时候默认就会有日志输出:

以上内容就是 Spring Boot 输出的控制台⽇志信息。

 本文介绍日志如何实现自定义输出,介绍日志的级别和使用

2 实现自定义日志打印

程序员自定义打印日志主要有两个步骤:

1 在程序中得到日志对象

2 使用日志对象的相关语法输出要打印的内容

2.1 得到日志对象

使用日志工厂函数LoggerFactory:

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

日志工厂函数中需要我们传递一个类的类型,方便知道日志的归属,发现、定位问题所在。注意Logger对象是org.slf4j包下的。(

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

SpringBoot中是内置了slf4j的,所以不用我们再手动的去添加依赖,我的maven中是没有添加slf4j的依赖但是项目中已经加入了所需要的maven:

 

2.2 使用日志打印对象

@RequestMapping("getall")public List<UserEntity> getAll() {userLogger.info("=============这是userController中的info===========");return userService.getAll();}

当后端接收到请求后就会在后端打印出刚才自定义的日志信息:

 2.3 日志格式说明

3 日志级别

  • ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。
  • ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。

3.1 日志级别以及使用

日志级别分为:

  1. TRACE: 最详细的日志级别,通常用于记录一些非常详细的调试信息,例如方法的入参、出参等。

  2. DEBUG: 用于记录调试信息,可以帮助你诊断问题。通常会记录一些关键操作的详细信息,但不会像TRACE级别那样详细。

  3. INFO: 用于记录应用程序的一般运行状态,比如启动信息、关键事件等。这是默认的日志级别。

  4. WARN: 用于记录一些可能的异常情况,这些情况不会影响应用程序的正常运行,但可能需要注意。

  5. ERROR: 用于记录错误信息,表示应用程序发生了一些错误或异常。这些错误可能会影响应用程序的正常运行。

  6. FATAL: 用于记录严重的错误,通常表示应用程序已经无法继续运行。

1-6这六种级别是按照日志级别排列的,级别越高收到的日志信息就越少,比如设置的是error级别的日志,那么就只能收到error和fetal级别的日志信息。

3.2 日志级别的设置

日志级别设置需要在配置文件中设置:

# 设置根日志级别
logging:level:root: INFO# 设置特定包的日志级别
logging:level:org.springframework: DEBUGcom.example: TRACE

可以设置根日志的级别也可以设置特定的包的日志级别。

现在设置根日志的级别是error看看是否还能看到info级别的日志:

 启动项目后发现控制台没有任何日志信息,后端接收到请求后自定义的info级别信息也看不见

 那么将自定义的日志级别换成error和fetal呢?

 结果是可以看到控制台输出了error的日志

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

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

相关文章

indexDB vue 批量创建表 和 批量插入数据

// 打开或创建数据库 const request indexedDB.open(myDatabase);request.onerror event > {console.error(打开数据库失败, event.target.errorCode); };// 数据库版本变化时创建表 request.onupgradeneeded event > {for (let i 1; i < 100; i) {const db even…

在 Redis 中处理键值 | Navicat

Redis 是一个键值存储系统&#xff0c;允许我们将值与键相关联起来。与关系型数据库不同的是&#xff0c; 在Redis 中&#xff0c;不需要使用数据操作语言 &#xff08;DML&#xff09; 和查询语法&#xff0c;那么我们如何进行数据的写入、读取、更新和删除操作呢&#xff1f;…

从0开始学go 第一天

今天是开始学go的第x天&#xff0c;前些日子看了看语言&#xff0c;今天找一个web开发来跟着学&#xff0c;记录一下遇到的问题&#xff0c;方便以后复习查阅。 视频看的是https://www.bilibili.com/video/BV1gJ411p7xC?p3&vd_sourceab5bdbd04f4142027c66d604d5285204 视…

数据库——Redis 常见数据结构以及使用场景分析

文章目录 1. string2. list3. hash4. set5. sorted set 你可以自己本机安装 redis 或者通过 redis 官网提供的在线 redis 环境。 1. string 介绍 &#xff1a;string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的&#xff0c;但是 Redis 并没有使用 C 的字符串…

Docker构建镜像

Docker根据Dockerfile文件构建镜像 在实际生产中&#xff0c;常常使用Dockerfile构建企业级生产环境镜像,然后再部署在我们的生产环境中&#xff0c;本文将从从零开始介绍Dockerfile如何使用&#xff0c;构建镜像。 Dockerhub官网地址&#xff1a;https://registry.hub.docke…

mysql基础面经之三:事务

6 事务 6.1 说一下事务的ACID和隔离级别 1 讲解了AID三个特性都是为了C&#xff08;一致性&#xff09;服务的。一般数据库需要使用事务保证数据库的一致性。 正确情况下最好详细讲讲&#xff1a; ACID是用来描述数据库事务的四个关键特性的首字母缩写&#xff0c;具体包括&a…

Vue Element upload组件和Iview upload 组件上传文件

今天要分享的是使用这俩个UI组件库的upload组件分别实现调用组件本身的上传方法实现和后台交互。接下来就是开车的时间&#xff0c;请坐稳扶好~ 一、element upload组件传送门 1、html文件 <el-upload ref"uploadRef" :action"uploadUrl" :data"…

深入探讨C存储类和存储期——Storage Duration

&#x1f517; 《C语言趣味教程》&#x1f448; 猛戳订阅&#xff01;&#xff01;&#xff01; ​—— 热门专栏《维生素C语言》的重制版 —— &#x1f4ad; 写在前面&#xff1a;这是一套 C 语言趣味教学专栏&#xff0c;目前正在火热连载中&#xff0c;欢迎猛戳订阅&#…

lab8 lock

PreRead 第六章3.5节&#xff1a;物理内存分配器8.1-8.3 文章目录 PreReadMemory allocatortaskshints思路 Buffer cachetaskhints思路实现 这次的lab&#xff0c;本质上都是通过将锁的粒度减小来获得性能的提升 第一个task&#xff0c;可以简单地按cpu划分&#xff0c;因为本…

【大模型AIGC系列课程 3-1】Meta开源大模型:羊驼系列

1. LLaMA https://arxiv.org/abs/2302.13971 LLaMA(由Meta推出)和GPT是两种不同的语言模型。以下是LLaMA相对于GPT的一些优点: ● 架构修改:LLaMA在Transformer架构的基础上进行了一些修改。例如,LLaMA使用了预归一化(pre-normalization)而不是后归一化(post-normaliz…

九耶丨阁瑞钛伦特-Java高频面试题-请谈谈 ReadWriteLock 和 StampedLock

ReadWriteLock包括两种子锁 &#xff08;1&#xff09;ReadWriteLock ReadWriteLock 可以实现多个读锁同时进行&#xff0c;但是读与写和写于写互斥&#xff0c;只能有一个写锁线程在进行。 &#xff08;2&#xff09;StampedLock StampedLock是Jdk在1.8提供的一种读写锁&a…

java.lang.UnsatisfiedLinkError: dlopen failed: library “libyuv.so“ not found

java.lang.UnsatisfiedLinkError: dlopen failed: library "libyuv.so" not found libyuv.so找不到&#xff1a; 解决方法&#xff1a; build.gradle配置: Android根目录下&#xff1a; externalNativeBuild {cmake {version "3.10.2"path file(src/mai…

GPT生产实践之定制化翻译

GPT生产实践之定制化翻译 GPT除了能用来聊天以外&#xff0c;其实功能非常强大&#xff0c;但是我们如何把它运用到生产实践中去&#xff0c;为公司带来价值呢&#xff1f;下面一个使用案例–使用gpt做专业领域定制化翻译 思路&#xff1a; 定制化&#xff1a;有些公司词条的…

数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成

数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成 目录 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成。 生成对抗…

Ubuntu22.04 交叉编译树莓派CM4 kernel

通过这个文章记录一下如何在Ubuntu22.04编译树莓派CM4的kernel。 主要参考树莓派官网的方法&#xff0c;也总结了一些关于SD卡分区的知识。 1&#xff0c;虚拟机安装Ubuntu 22.04&#xff0c;就不介绍了。 2&#xff0c;先将树莓派官方系统烧录倒SD卡中&#xff0c;设备能正…

Electron+Vue3+TS 打包exe客户端

Electron Vue3 TS 实战 - 掘金 如果报错loaderContext.getOptions is not a function ts-loader版本不一致导致的问题。 解决方案&#xff1a;npm install ts-loader8.0.0 --save

C语言基础之——指针(上)

前言&#xff1a;小伙伴们又见面啦&#xff01;本期内容&#xff0c;博主将展开讲解有关C语言中指针的上半部分基础知识&#xff0c;一起学习起来叭&#xff01;&#xff01;&#xff01; 目录 一.什么是指针 二.指针类型 1.指针的解引用 2.指针-整数 三.野指针 1.野指针…

【洛谷】P2678 跳石头

原题链接&#xff1a;https://www.luogu.com.cn/problem/P2678 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二分答案。&#xff08;使用二分需要满足两个条件。一个是有界&#xff0c;一个是单调。 这题的题面&#xff1a;使得选手们在比赛过程中…

【数据结构】手撕顺序表

一&#xff0c;概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储&#xff1b; 在数组上完成数据的增删查改。 1&#xff0c; 静态顺序表&#xff1a;使用定长数组存储元素。 2.&#xff0c;动态顺序表&#xff1…

基于Spring Boot的游泳馆管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的游泳馆管理系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java spring…