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

SpringBoot中的日志使用

SpringBoot的默认使用

观察SpringBoot的Maven依赖图

可以看出来,SpringBoot默认使用的日志系统是使用Slf4j作为门户,logback作为日志实现

编写一个测试代码看是否是这样

@SpringBootTest
class SpringbootLogDemoApplicationTests {//使用Slf4j来创建LOGGER对象public static final Logger LOGGER = LoggerFactory.getLogger(SpringbootLogDemoApplicationTests.class);@Testpublic void test01() throws Exception {LOGGER.error("error");LOGGER.warn("wring");LOGGER.info("info");LOGGER.debug("debug");LOGGER.trace("trace");//使用Log4j来获取Logger对象org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringbootLogDemoApplicationTests.class);logger.info("log4j info");}
}

运行结果如下 

2023-10-22 17:21:16.307 ERROR 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : error

2023-10-22 17:21:16.308 WARN 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : wring

2023-10-22 17:21:16.313 INFO 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : info

2023-10-22 17:21:16.337 INFO 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : log4j info

可以看到输出格式是一样的,说明即使使用Log4j获取的Logger对象打印日志实际上还是logback来实现日志输出。

SpringBoot的日志配置

我们可以在aplication.properties文件中进行简单的配置

#指定自定义Logger对象的输出日志级别
logging.level.com.zmt = debug#指定控制台输出消息格式
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] ===== %msg%n
#指定日志文件存放的目录,默认文件名为spring.log
logging.file.path=/logs/springboot/
#指定日志文件消息格式
logging.pattern.file=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] ===== %msg%n

运行观察控制台和文件

但是application.properties的配置并不能满足实际需求,比如文件拆分规则等,我们可以自己添加对应日志框架的配置文件来代替application.properties的日志配置

接下来添加一个logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration><property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %M %L [%thread] %m%n"></property><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!--控制输出流对象,默认为System.out黑色字体--><target>System.err</target><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--只输出error级别的信息--><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--自定义Logger--><logger name="com.zmt" level="info" additivity="dalse"><appender-ref ref="console"/></logger>
</configuration>

运行测试代码观察控制台输出

只输出了红色字体的error级别日志。配置文件生效

使用SpringBoot解析日志配置

如果使用SpringBoot解析日志配置我们需要将logback.xml文件修改为logback-spring.xml。因为logback.xml加载过早,无法解析扩展标签。而修改为logback-spring.xml后,可以解析SpringBoot的扩展标签。

在xml文件中添加springProfile标签

  	<appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!--控制输出流对象,默认为System.out黑色字体--><target>System.err</target><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--开发环境下解析成一种消息格式--><springProfile name="dev"><pattern>${pattern}</pattern></springProfile><!--生产环境下解析成另一种消息格式--><springProfile name="pro"><pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %M %L [%thread]========= %m%n</pattern></springProfile></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--只输出error级别的信息--><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender>

在application.properties添加配置指定环境

#设置为开发环境
spring.profiles.active=dev

运行观察控制台是否是输出“---”

修改为pro环境后再次运行观察

可以看到输出格式不同。配置生效

SpringBoot切换日志实现

在pom文件中进行修改

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 排除jar包 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!-- 引入jar包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>

运行发现又使用了log4j2的默认配置打印日志输出。

相关文章:

SpringBoot中的日志使用

SpringBoot的默认使用 观察SpringBoot的Maven依赖图 可以看出来&#xff0c;SpringBoot默认使用的日志系统是使用Slf4j作为门户&#xff0c;logback作为日志实现 编写一个测试代码看是否是这样 SpringBootTest class SpringbootLogDemoApplicationTests {//使用Slf4j来创建LOG…...

微信小程序中监听横屏竖屏

直接上代码 第一步&#xff1a;在你想要监听页面的json文件中添加此节点 "pageOrientation": "auto" 第二步&#xff1a;wx.onWindowResize() page&#xff08;{ onLoad() {this.kstd()},kstd(){ // 监听屏幕旋转事件 wx.onWindowResize((res)>{// …...

云原生概述

1. 何谓云原生 云原生是一种构建和运行应用程序的方法&#xff0c;是一套技术体系和方法论。云原生&#xff08;CloudNative&#xff09;是一个组合词&#xff0c;CloudNative。Cloud表示应用程序位于云中&#xff0c;而不是传统的数据中心&#xff1b;Native表示应用程序从设…...

消失的它:网络层分片包中的第一个分片包去哪了?

在网络层IP包分片的过程中&#xff0c;遇到了大麻烦&#xff01; 主机A&#xff1a; IP地址&#xff1a;192.168.0.10/24 MAC地址&#xff1a;02:00:00:00:00:10 主机B&#xff1a; IP地址&#xff1a;192.168.0.20/24 MAC地址&#xff1a;02:00:00:00:00:20 MTU&#xff1a;1…...

LeetCode刷题---有效的括号

这里用到了栈的思想 栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说&#xff0c;表尾端称为栈顶&#xff08;top&#xff09;&#xff0c;表头端称为栈低&#xff08;bottom&#xff09;。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除&#xff0c…...

QT学习笔记-QT访问各种关系数据库笔记汇总

QT学习笔记-QT访问各种关系数据库笔记汇总 1、QT访问Oracle数据库2、QT访问SQLServer数据库3、QT访问MySQL数据库4、QT访问PostgreSQL数据库5、QT访问Access数据库6、QT多线程中访问数据库的要点 在使用QT进行应用开发过程中&#xff0c;不可避免的会涉及到访问关系数据库&…...

Shell脚本-常用命令

Shell 脚本 Shell 脚本&#xff08;shell script&#xff09;&#xff0c;是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本&#xff0c;但读者朋友要知道&#xff0c;shell 和 shell script 是两个不同的概念。 由于习惯的原因&#xff0c;简洁起见&a…...

Flink之输出算子Redis Sink

Redis Sink Redis Sinkjedis实现添加依赖自定义Redis Sink使用Sink验证 开源 Redis Connector添加依赖自定义Redis SinkRedisCommandString数据类型示例Hash数据类型示例 使用SinkRedisStringSinkRedisHashSink 验证 Redis Sink 在新版Flink的文档中&#xff0c;并没有发现Redi…...

【数据结构】顺序表实现通讯录

前言 在上一节中我们实现了顺序表&#xff0c;现在我们将使用顺序表完成通讯录的实现。&#xff08;注&#xff1a;本人水平有限&#xff0c;“小屎山”有些许bug&#xff0c;代码冗余且语无伦次&#xff0c;望谅解&#xff01;&#x1f605;&#xff09; 文章目录 一、数据结构…...

JMeter 随机数生成器简介:使用 Random 和 UUID 算法

在压力测试中&#xff0c;经常需要生成随机值来模拟用户行为。JMeter 提供了多种方式来生成随机值&#xff0c;本文来具体介绍一下。 随机数函数 JMeter 提供了多个用于生成随机数的函数&#xff0c;其中最常用的是 __Random 函数。该函数可以生成一个指定范围内的随机整数或…...

vue3 更换 elemnt-ui / element-plus 版本npm命令

1. 安装 / 更换 element-ui 版本 [ 在 后面指定想要安装的版本 ] //卸载当前版本 npm uninstall element-ui //安装指定版本 npm i element-ui2.4.8 -S --legacy-peer-deps 2. 安装 / 更换 element-plus 版本 [ 在 后面指定想要安装的版本 ] npm install element-plus2.3…...

react.js 手写响应式 reactive

Redux 太繁琐&#xff0c;Mbox 很酷但我们可能没必要引入新的包&#xff0c;那就让我们亲自在 react.js 中通过代理实现一套钩子来达到类似 vue 的响应式状态&#xff1a; 实现 reactive hooks 代理类声明 代理状态的类应当提供可访问的状态&#xff0c;和订阅变化的接口。 …...

代码随想录打卡第四十六天|完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

完全背包理论 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一…...

【BP-Adaboost预测】基于BP神经网络的Adaboost的单维时间序列预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Origami Studio for Mac:塑造未来,掌握原型设计之巅

在当今高度竞争的设计领域&#xff0c;原型设计的重要性不言而喻。它不仅是沟通想法&#xff0c;也是测试和改进设计的关键环节。而现在&#xff0c;一款强大的原型设计工具——Origami Studio for Mac&#xff0c;正在席卷设计界&#xff0c;以其独特的功能和卓越的性能&#…...

UML类图中各箭头表示总结

UML类图中各箭头表示总结 1、泛化2、实现3、依赖4、关联5、聚合6、组合 在UML类图中&#xff0c;箭头关系是用来表示类之间的关系的。箭头关系的种类有以下几种&#xff1a; 1、泛化 泛化&#xff1a;表示类之间的继承关系。箭头从子类指向父类。箭头&#xff1a;实线空心三角…...

神经网络量化----为了部署而特别设计

引言:一般神经网络量化有两个目的: 为了加速,在某些平台上浮点数计算比较耗费时间,替换为整形可以加快运算为了部署,某些平台上只支持整形运算,比如在芯片中如果是第1个目的,则使用常规的量化手段就可以满足,将浮点数运算变成整形运算+较少的浮点运算 但是如果是第2个目…...

代码随想录算法训练营Day60|单调栈01

代码随想录算法训练营Day60|单调栈01 文章目录 代码随想录算法训练营Day60|单调栈01一、739. 每日温度二、496.下一个更大元素 I 一、739. 每日温度 class Solution {public int[] dailyTemperatures(int[] temperatures) {//单调栈int lenstemperatures.length;int result[]n…...

openMP学习笔记 -编程模型

OpenMP模型 gcc编译openmp指令&#xff1a;gcc test.cpp -o test -fopenmp 定积分计算 函数面积 给定一个定积分&#xff0c;计算其面积&#xff1a; ∫ 0 1 4.0 ( 1 x 2 ) d x \int^{1}_{0}{\frac{4.0}{(1x^2)}dx} ∫01​(1x2)4.0​dx omp 概念 并行区域 并行区域用于…...

【Hive SQL 每日一题】环比增长率、环比增长率、复合增长率

文章目录 环比增长率同比增长率复合增长率测试数据需求说明需求实现 环比增长率 环比增长率是指两个相邻时段之间某种指标的增长率。通常来说&#xff0c;环比增长率是比较两个连续时间段内某项数据的增长量大小的百分比。 环比增长率反映了两个相邻时间段内某种经济指标的变…...

手把手教你学Simulink——基于Simulink的电机参数在线辨识与自适应控制

目录 手把手教你学Simulink——基于Simulink的电机参数在线辨识与自适应控制​ 摘要​ 一、背景与挑战​ 1.1 为什么固定参数的FOC撑不过“四季如歌”?​ 1.2 核心痛点与设计目标​ 二、系统架构与核心控制推导​ 2.1 整体架构:辨识与控制双闭环的“双簧戏”​ 2.2 核…...

手机号找回QQ账号:3大实用场景与完整解决方案

手机号找回QQ账号&#xff1a;3大实用场景与完整解决方案 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾因忘记QQ账号而无法登录重要服务&#xff1f;或者需要验证手机号与QQ号的绑定关系却无从下手&#xff1f;phone2qq工…...

QMCDecode:3分钟快速解锁QQ音乐加密文件的终极指南

QMCDecode&#xff1a;3分钟快速解锁QQ音乐加密文件的终极指南 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转换…...

面试官内部面经,仅限应届生看

文章目录前言一、AI岗应届生面试&#xff0c;面试官到底在考察什么&#xff1f;1.1 技术基础&#xff1a;不考偏题&#xff0c;只考核心底层逻辑1.2 编程实战&#xff1a;手撕代码工程思维&#xff0c;缺一不可1.3 项目经历&#xff1a;深挖细节&#xff0c;拒绝“假大空”1.4 …...

RT-Thread Studio实战:3分钟搞定华大开发板MDK5工程生成(附scons命令详解)

RT-Thread Studio实战&#xff1a;华大开发板MDK5工程生成全流程解析 第一次接触RT-Thread和华大开发板时&#xff0c;最让人头疼的就是如何快速搭建开发环境并生成可用的MDK5工程。作为国内领先的物联网操作系统&#xff0c;RT-Thread以其轻量级和高度可裁剪性深受开发者喜爱&…...

深度学习篇---矩阵的魔法

我们可以把乘以特殊矩阵想象成对一张图片或一个图形施加“魔法指令”——这些指令藏在矩阵里&#xff0c;乘上坐标向量后&#xff0c;图形就会按我们想要的方式变形。下面我会从二维平面&#xff08;2D&#xff09;开始介绍&#xff0c;最后提一下三维&#xff08;3D&#xff0…...

别再只懂03/06功能码了!Modbus协议在智慧农业中的7个高级应用与避坑指南

别再只懂03/06功能码了&#xff01;Modbus协议在智慧农业中的7个高级应用与避坑指南 当清晨的阳光洒向连片的温室大棚&#xff0c;土壤湿度传感器悄然唤醒灌溉系统&#xff0c;风机根据二氧化碳浓度自动调节转速——这些看似简单的农业自动化场景背后&#xff0c;往往隐藏着工业…...

云原生环境中的存储管理:从PV到StorageClass的全面指南

云原生环境中的存储管理&#xff1a;从PV到StorageClass的全面指南 &#x1f525; 硬核开场 各位技术大佬们&#xff0c;今天咱们来聊聊云原生环境中的存储管理。别跟我说你还在为容器存储问题头疼&#xff0c;那都2023年了&#xff01;在云原生时代&#xff0c;存储是Kubernet…...

龙泉驿全屋智能选哪家?诺亚家总部直营+1小时服务圈,比本地店省30%

​在成都&#xff0c;说到“东进”和宜居&#xff0c;龙泉驿绝对是热门选项。这里的业主&#xff0c;多是追求生活品质的年轻家庭和改善型住户。随着装修季的到来&#xff0c;“全屋智能”几乎成了龙泉驿新家的标配。但问题也来了&#xff1a;市场品牌眼花缭乱&#xff0c;本地…...

Markdown转docx 保留Latex渲染样式

需求分析 Markdown转docx有大量公式。包括行内公式和行间公式Office 自带的数学与 Latex的渲染样式存在差异。本文倾向于使用Latex的渲染样式轻量调整。转换后仅做轻微的调整&#xff0c;不再编辑公式。 选择方案 主要编辑在Markdown&#xff0c;使用Latex渲染样式&#xff…...