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

3.4 Spring Boot 日志配置

第3章 Spring Boot 的系统配置

3.1 Spring Boot 系统配置文件
3.2 Spring Boot 自定义配置项
3.3 Spring Boot 其他配置
3.4 Spring Boot 日志配置
3.5 实战:Spring Boot 实现系统多环境配置

3.4 Spring Boot 日志配置

日志对于系统监控、故障定位非常重要,比如当生产系统发生问题时,完整清晰的日志记录有助于快速定位问题。接下来介绍 Spring Boot 对日志的支持。

3.4.1 Spring Boot 日志简介

Spring Boot 自带 spring-boot-starter-logging 库实现系统日志功能,spring-boot-starter-logging 组件默认使用 LogBack 日志记录工具。系统运行日志默认输出到控制台,也能通过配置输出到文件中。

下面通过示例来演示 Spring Boot 项目配置日志的功能。

修改 pom.xml 文件,添加spring-boot-starter-logging依赖。

pom.xml

        <!--spring boot 日志(spring-boot-starter-web 包含 spring-boot-starter,而spring-boot-starter 包含 spring-boot-starter-logging依赖包,所以引入spring-boot-starter-web之后可以不需要再引入spring-boot-starter-logging)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>

启动项目,查看控制台的日志输出情况,如图所示。

SpringBoot控制台启动日志(默认日志格式).png

备注:

如果项目中有引入 spring-boot-starter-web依赖包 或 spring-boot-starter依赖包,则可以不用引入spring-boot-starter-logging依赖包。

原因:这是因为spring-boot-starter-web 包含 spring-boot-starter,而spring-boot-starter 包含 spring-boot-starter-logging依赖包,所以引入spring-boot-starter-web之后可以不需要再引入spring-boot-starter-logging.

3.4.2 配置日志输出格式

在 Spring Boot 项目中配置日志功能之后,如何定制自己的日志格式、自定义记录的信息呢?

Spring Boot 提供了 logging.pattern.consolelogging.pattern.file 配置项来定制日志输出格式,只需在 application.properties 文件中添加 logging.pattern.consolelogging.pattern.file 的配置项即可:

# 3.4.2 配置日志输出格式
logging.pattern.console=%d{yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n

上述配置的示例中,对应符号的含义如下:

  • %d{yyyy-MM-dd-HH:mm:ss.SSS}:日志输出时间。
  • %thread:输出日志的进程名,这在 Web 应用以及异步任务处理中很有用。
  • %-5level:日志级别,使用5个字符靠左对齐。
  • %logger:日志输出者的名称。
  • %msg:日志消息。
  • %n:平台的换行符。

修改完配置项后重启项目,查看控制台的日志输出情况,如图所示。
SpringBoot控制台启动日志(定制日志格式).png

Spring Boot 控制台启动日志的格式已经改成配置的格式。

3.4.3 配置日志输出级别

一般而言,系统的日志级别为 TRACE < DEBUG < INFO < WARN < ERROR <FATAL,级别逐渐提高。如果日志级别设置为 INFO,则意味着 TRACE 和 DEBUG 级别的日志都不会输出。

  • FATAL:致命等级的日志,指发生了严重的会导致应用程序退出的事件。
  • ERROR:错误等级的日志,指发生了错误,但是不影响系统运行。
  • WARN: 警告等级的日志,指发生了异常,可能是潜在的错误。
  • INFO: 信息等级的日志,指一些在粗粒度级别上需要强调的应用程序运行信息。
  • DEBUG:调试等级的日志,指一些细粒度的对于程序调试有帮助的信息。
  • TRACE:跟踪等级的日志,指一些包含程序运行详细过程的信息。

Spring Boot 通过 logging.level 配置项来设置日志输出级别。

下面通过示例演示 Spring Boot 日志输出级别。

LogDemo.java

package com.example.helloworld.log;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Log级别测试类*/
@Configuration
public class LogDemo {/*** 一般而言,系统的日志级别为 TRACE < DEBUG < INFO < WARN < ERROR <FATAL,级别逐渐提高。如果日志级别设置为 INFO,则意味着 TRACE 和 DEBUG 级别的日志都不会输出。** FATAL:致命等级的日志,指发生了严重的会导致应用程序退出的事件。* ERROR:错误等级的日志,指发生了错误,但是不影响系统运行。* WARN: 警告等级的日志,指发生了异常,可能是潜在的错误。* INFO: 信息等级的日志,指一些在粗粒度级别上需要强调的应用程序运行信息。* DEBUG:调试等级的日志,指一些细粒度的对于程序调试有帮助的信息。* TRACE:跟踪等级的日志,指一些包含程序运行详细过程的信息。*/Logger logger = LoggerFactory.getLogger(getClass());@Beanpublic String logMethod() {logger.trace("LogDemo trace 日志...");logger.debug("LogDemo debug 日志...");logger.info("LogDemo info 日志...");logger.warn("LogDemo warn 日志...");logger.error("LogDemo error 日志...");return "hello log";}}

在上面的示例中,针对每个日志级别输出一行日志。我们可以调整输出的日志级别,让其只有在该级别以后的高级别生效。

(1)默认整个项目的日志级别为INFO

Spring Boot 默认整个项目的日志输出级别为 INFO。

启动项目验证日志输出情况,如图所示。
系统控制台启动日志(默认日志输出级别测试).png

如图所示,Spring Boot 控制台输出的系统启动日志级别为 INFO 级别,输出了 INFO、WARN 和 ERROR 的日志。

(2)指定整个项目的日志级别

配置日志输出级别,在 application.properties 中添加如下配置:

logging.level.root=WARN

在上面的示例中,我们使用 logging.level.root 指定整个项目的日志输出级别为WARN。

启动项目验证日志输出情况,如图所示。
系统控制台启动日志(配置整个项目的日志输出级别为WARN).png

如图所示,Spring Boot 控制台输出的系统启动日志级别为 WARN 级别,输出了 WARN 和 ERROR 的日志。

(3)对某个包指定单独的日志级别

配置日志输出级别,在 application.properties 中添加如下配置:

logging.level.root=INFO
logging.level.com.example.helloworld.log=WARN

在上面的示例中,我们将整个项目日志级别设置为INFO,同时将指定包com.example.helloworld.log下的日志级别设置为WARN。

启动项目验证日志输出情况,如图所示。
整个项目日志级别设置为INFO,同时将指定包com.example.helloworld.log下的日志级别设置为WARN).png

如图所示,Spring Boot 控制台输出的系统启动日志级别为 INFO 级别,输出INFO、WARN、ERROR日志;而com.example.helloworld.log包下LogDemo的日志级别设置为WARN,输出WARN、ERROR日志。

3.4.4 保存日志文件

一般情况下,在开发环境中习惯通过控制台查看日志,但是生产环境中需要将日志信息保存到磁盘上,以便于日后的日志查询。应该如何配置才能将日志信息保存到日志文件内呢?下面演示保存日志文件的过程。

在 resources 目录下的 applicaiton.properties 配置文件中添加如下配置项:

logging.file.name=E:/var/log/spring_log.log

在上面的示例中,我们使用 logging.file.name 指定日志文件的路径与名字。

重新启动项目,可以看到在 E:/var/log 目录下生成了 spring_log.log 文件,该文件的内容和控制台打印输出的内容一致,如图所示。
SpringBoot保存的日志文件.png

拓展

日志配置——logging.file.namelogging.file.path的使用区别?


(1)logging.file.name可以指定日志文件的路径与名字

示例:
logging.file.name=E:/var/log/spring_log.log
则该日志文件的路径为E:/var/log,日志文件的名字是spring_log.log

(2)logging.file.path可以指定日志文件的路径,而不能指定名字

示例:
logging.file.path=E:/var/log
则该日志文件的路径为E:/var/log,日志文件的名字是默认的spring.log

(3)logging.file.name和logging.file.path不能同时生效

在配置了两者的情况下,以logging.file.name为准。

来源:《Spring Boot 从入门到实战》学习笔记

相关文章:

3.4 Spring Boot 日志配置

第3章 Spring Boot 的系统配置 3.1 Spring Boot 系统配置文件 3.2 Spring Boot 自定义配置项 3.3 Spring Boot 其他配置 3.4 Spring Boot 日志配置 3.5 实战&#xff1a;Spring Boot 实现系统多环境配置 3.4 Spring Boot 日志配置 日志对于系统监控、故障定位非常重要&#xf…...

3款百里挑一的国产软件,逆天好用,装了就舍不得卸载

推荐3款让你偷懒&#xff0c;让你上头的提效电脑软件&#xff0c;个个功能强大&#xff0c;让你远离加班&#xff01; 很多几个小时才能做好的事情&#xff0c;用上它们&#xff0c;只需要5分钟就行&#xff01;&#xff01; 1、JNPF快速开发平台 JNPF 是一款精巧耐用的软件…...

Java实现在线沟通功能

文章目录1、介绍 和 特点2、整合SpringBoot2.1、导入依赖2.2、websocket 配置类2.3、消息处理类2.4、启动服务2.5、前端代码&#xff1a;张三2.6、前端代码&#xff1a;李四3、效果4、小结1、介绍 和 特点 t-io是基于JVM的网络编程框架&#xff0c;和netty属同类&#xff0c;所…...

识别密文加密类型

离线密码破解&#xff1a;离线不会触发密码锁定机制不会产生大量登录失败日志引起管理员注意HASH识别工具&#xff08;识别哈希类型&#xff09;&#xff1a;hash-identifierHashid yara规则匹配文件得到特定加密算法一、hash-identifierKali Linux提供工具hash-identifier来识…...

node报错

记录bug:运行 npx -p storybook/cli sb init 时报错gyp info spawn C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exegyp info spawn args [gyp info spawn args build/binding.sln,gyp info spawn args /nologo,gyp info spawn args…...

如何使用开源 BI 工具 DataEase 实现系列数据分析呢?

当我们使用可视化分析工具制作仪表板时&#xff0c;可能需要制作的仪表板不是单个单个的可视化大屏&#xff0c;而是一系列的仪表板&#xff0c;我们需要用它来产生一个连续性的故事&#xff0c;那么这个时候我们该怎么办呢&#xff1f;例如说总分形式&#xff0c;我们需要一个…...

金仓数据库安装

一、麒麟操作系统安装金仓数据库 操作系统 DISTRIB_IDKylin DISTRIB_RELEASEV10 DISTRIB_CODENAMEjuniper 按照安装文档的步骤安装&#xff0c;记得记住设置的数据库的用户名、密码 二、window安装连接数据库的工具软件 三、jdbc连接数据库 &#xff08;1&#xff09;连接工…...

深入浅出Webpack2-快速掌握webpack基本配置

深入浅出Webpack2-快速掌握webpack基本配置1.Entry1.1 context1.2 Entry类型2.Output2.1 filename2.2 path3.Module3.1配置Loader4.Resolve4.1 alias4.2 extensions4.3 modules5.Plugin6.DevServer7.其他配置项上一篇文章我们快速上手认识了一下webpack&#xff0c;今天这篇文章…...

如何使评论具有可操作性?取悦客户的指南

永远不要低估承认的力量。 当品牌与客户互动时&#xff0c;认可会带来更好的关系和更好的沟通。与买家和客户建立更多的个人联系意味着品牌需要证明他们支持他们的产品和客户。评论是利用客户分享他们的故事的那些时刻的绝佳机会。 为什么评论在 SaaS 中至关重要 在 B2B 软件的…...

一文带你彻底搞懂Nginx反向代理

一文带你彻底搞懂Nginx反向代理一、什么是反向代理1.1 正向代理1.2 反向代理1.3 总结二、配置反向代理2.1 准备 Tomcat2.2 配置 Nginx一、什么是反向代理 1.1 正向代理 举一个通俗的例子&#xff0c;因为众所周知的原因&#xff0c;我们无法访问谷歌&#xff0c;但是因为某些…...

手写SpringBoot的starter

自定义SpringBoot的starter 引言 starter命名格式&#xff1a; 官方的 starter 的命名格式为 spring-boot-starter-{xxxx} 比如spring-boot-starter-activemq 第三方我们自己的命名格式为 {xxxx}-spring-boot-starter。比如mybatis-spring-boot-starter。 如果我们忽略这种约定…...

pytorch1.2.0+python3.6

一、说明 pytorch1.2.0python3.6CUDA10.0cudnn7.4.1.5 二、步骤 在conda中创建一个新的虚拟环境 查看一下自己的所有环境 激活虚拟环境 conda activate torch1.2.0 关于cuda和cudnn 1、查看自己电脑系统是10.2版本 http://链接&#xff1a;https://pan.baidu.com/s/1v5cN6…...

WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务

PowerShell 停止、启动、暂停和重启服务、卸载服务 PowerShell 停止、启动、暂停和重启服务 官文 powershell卸载服务 官文 目录PowerShell 停止、启动、暂停和重启服务、卸载服务停止、启动、暂停和重启停止服务启动服务暂停服务重启服务卸载移除服务停止、启动、暂停、重启…...

数据库专题

请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别&#xff1f; 默认隔离级别 mysql repeatable-read oracle read-committed 脏读&#xff1a;不可重复读&#xff1a;幻读&#xff1a; CHAR 和 VARCHAR 的区别&#xff1f;…...

浅谈MySQL索引

目录 1.索引的定义 2.索引的原理 3.Hash索引与B Tree索引 4.索引的分类 5.建立索引的注意事项 1.索引的定义 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索…...

安装包UI美化之路-通过nsNiuniuSkin来做Electron程序的打包、发布与升级

nsNiuniuSkin从发布之初&#xff0c;因其简单、简洁、高效&#xff0c;受到了非常多公司的青睐&#xff0c;现在已经越来越多的公司采用我们的这套解决方案来制作安装包了&#xff01; 从一个安装包UI插件&#xff0c;逐步演化成一套集美观、安全、简洁、自动化为一体的完整的…...

飞鹅打印机怎么样?飞鹅打印机好用吗?飞鹅打印机怎么知道订单是否漏单?

外卖打印机怎么选?飞鹅打印机好用吗&#xff1f;飞鹅智能云打印机产品专注于云打印的解决方案和技术服务提供。2019 年飞鹅已经成为国内先进的云打印服务提供商&#xff0c;主要是服务美团、饿了么客户&#xff0c;产品主要优势&#xff1a;自动接单、自动打印&#xff0c;无需…...

网络协议(八):传输层-TCP(三次握手、四次挥手原理)

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 网络…...

最新OpenMVG编译安装与逐命令运行增量式和全局式SfM教程

openmvg是一个轻便的可以逐步运行的SfM开源库&#xff0c;它同时实现了增量式和全局式两种算法。 说明文档地址&#xff1a;https://openmvg.readthedocs.io/en/latest/ github主页地址&#xff1a;https://github.com/openMVG/openMVG 1 编译安装 openmvg的安装比较简单&…...

数据结构与算法系列之插入排序

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 什么是插入排序 有一个已经有序的数据序列&#xff0c;要求在这个已经排好的数…...

Text to image论文精读ALR-GAN:文本到图像合成的自适应布局优化

ALR-GAN是北京工业大学学者提出的一种自适应布局优化生成对抗网络&#xff0c;其可以在没有任何辅助信息的情况下自适应地优化合成图像的布局。 文章发表于2023年&#xff0c;IEEE Transactions on Multimedia&#xff08;TMM&#xff09;期刊&#xff08;CCF B&#xff0c;JCR…...

windows版 redis在同一局域网下互联

项目场景&#xff1a; 同一局域网下各个主机互相连接同一个redis 问题描述 无法连接 原因分析&#xff1a; 没有放行对方的地址 解决方案&#xff1a; 修改配置文件 最重要的一步如下 然后把 redis.windows.conf的文件也照上面的修改一下保持一致 然后安装一下redis服务这…...

Near-Optimal Bayesian Online Assortment of Reusable Resources

摘要 受租赁服务在电子商务中的应用的激励&#xff0c;我们考虑为不同类型的到达消费者提供可重复使用资源的在线分类的收入最大化。我们针对贝叶斯环境中的最优在线策略设计了具有竞争力的在线算法&#xff0c;其中类型随时间独立于已知的异构分布绘制。在初始库存最小值cmin…...

数据库复习2

一. 简答题&#xff08;共1题&#xff0c;100分&#xff09; 1. (简答题) 存在数据库test&#xff0c;数据库中有如下表&#xff1a; 1.学生表 Student(Sno,Sname,Sage,Ssex) --Sno 学号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 主键Sno 2.教师表 Teacher(Tno,Tname) --T…...

公众号运营之竞品分析,教你拆解公众号

知己知彼&#xff0c;百战不殆&#xff0c;公众号运营亦是如此。 当运营者只关注自己账号的时候&#xff0c;很容易陷入某个误区中出不来。这个时候就要拓宽我们的视野&#xff0c;多去看看“外面的世界”&#xff0c;不要只局限于自己的一片小天地中。 看看同领域优秀公众号…...

python常见问题详解

Python python 没有多态&#xff0c;而是鸭子类型 多继承&#xff0c;没有接口&#xff0c;可通过语法糖实现接口的作用 lambda中只能有一句 "/"表示之前的参数是必须是位置参数&#xff0c;”**“表示是后面的必须是关键字参数 Python多进程 Python 多线程是伪多线…...

MyBatis-常用SQL操作

一、动态SQL 1.概述】 1.1动态SQL&#xff1a; 是 MyBatis 的强大特性之一&#xff0c;解决拼接动态SQL时候的难题&#xff0c;提高开发效 1.2分类&#xff1a; if choose(when,otherwise) trim(where,set) foreach 2.if 2.1 做 where 语句后面条件查询的,if 语句是可以…...

DSPE-PEG-TCO;磷脂-聚乙二醇-反式环辛烯科研用化学试剂简介

中文名称 磷脂-聚乙二醇-反式环辛烯 英文名称 DSPE-PEG-TCO 外观&#xff1a;粉末或半固体&#xff0c;取决于分子量。 溶剂&#xff1a;溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等。在水中有很好的溶解性 稳定性&#xff1a;冷藏保存&#xff…...

华为OD机试真题Java实现【最小施肥机能效】真题+解题思路+代码(20222023)

最小施肥机能效 某农场主管理了一大片果园,fields[i]表示不同果林的面积,单位:( m 2 m^2 m2),现在要为所有的果林施肥且必须在 n 天之内完成,否则影响收成。 小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完后当天不再进行施肥作业。 假设施肥机的…...

【问题记录】【排查问题的方法总结】vue3中数据失去响应式?为什么数据变了,视图只更新了一次就不再更新了?

一、问题概述&#xff1a; 持续请求的数据变动之后&#xff0c;控制台输出绑定的响应式变量 mapObj 的确变了&#xff0c;但是视图上只更新了一次&#xff0c;后续就不再更新了。 二、排查过程&#xff1a; PC上用定时器setInterval模拟数据(全是小于0的数据)更新&#xff0…...