3.4 Spring Boot 日志配置

news2025/7/16 4:19:57

第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());

    @Bean
    public 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 从入门到实战》学习笔记

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

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

相关文章

Qt——Javascript/Qt交互、脚本化

Qt提供了对Javascript的良好支持, 如果查阅过文档你就知道Qt有两个不同的Js封装引擎&#xff1a; QScriptEngine QJSEngine QScriptEngine出现的比较早&#xff08;自Qt4.3始&#xff09;&#xff0c;基于WebKit的JavaScriptCore引擎&#xff0c;提供的api相对来说比较丰富&a…

(一维、二维)数组传参,(一级、二级)指针传参【含样例分析,新手易懂】

目录数组传参一维数组传参二维数组传参指针传参一级指针传参二级指针传参我们在写代码的时候难免要把数组或者指针传给函数&#xff0c;那函数的参数该如何设计呢&#xff1f; 数组传参 一维数组传参 我们首先来看下面代码的几个例子&#xff1a; #include <stdio.h>…

优化长尾关键词有什么好处?在线长尾关键词挖掘

​想知道为什么要使用长尾关键词&#xff1f; 好吧&#xff0c;它们可以帮助你轻松找到合适的受众。 ​ 1.获得更高的转化率 长尾关键词对于搜索特定信息更有用。使用长尾关键词时通常会获得更高的转化率&#xff0c;因为内容与受众的需求更相关。 举个例子&#xff1a;你正…

3年测试拿8K,被校招来的实习生反超薪资,其实你在假装努力

最近朋友给我分享了一个他公司发生的事 大概的内容呢&#xff1a;公司一位工作3年的测试工资还没有新人高&#xff0c;对此怨气不小&#xff0c;她来公司辛辛苦苦三年&#xff0c;三年内迟到次数都不超过5次&#xff0c;每天都是按时上下班&#xff0c;工作也按量完成&#xf…

【华为OD机试模拟题】用 C++ 实现 - 最低位排序(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

结构效度分析流程

结构效度分析流程如下图 一、结构效度的意义 效度分析在学术研究中非常常见&#xff0c;结构效度是为了分析“从量表获得的结果与设计该量表时所假定的理论之间的符合程度”。简单来讲&#xff0c;在研究者设计量表之初&#xff0c;一般会预设好几个维度&#xff0c;在经过因子…

docker搭建MySQL集群(1主1从)

1.创建挂载路径及配置文件my.cnf&#xff0c;挂载mysql的数据、配置、日志 /usr/mydata/mysql/conf/s1 /usr/mydata/mysql/conf/m1my.cnf先只写server-id,保证主从不同 2.拉取MySQL镜像&#xff0c;启动两个实例 docker run -p 3316:3306 --name mysql-m1 -v /usr/mydata/m…

识别密文加密类型

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

LabVIEW如何调用.m脚本LabVIEW调用MATLAB

LabVIEW如何调用.m脚本LabVIEW调用MATLAB有一个用MATLAB编写的脚本&#xff0c;想知道从LabVIEW调用它的方法&#xff0c;以及哪一个是最快的。解决方法有几种方法可以在LabVIEW中调用.m脚本。LabVIEW中的MATLABScript Node使用ActiveX调用MATLAB运行时系统。注意&#xff1a;不…

Nginx 02篇——Nginx基本配置与参数说明篇

Nginx 02篇——Nginx基本配置与参数说明篇前言-默认配置文件1. 前言——关于nginx1.1 关于nginx1. 2 Nginx 01篇——Nginx安装2. Nginx 配置文件结构2.1 Nginx 安装后的默认文件2.2 Nginx 的三大组成部分3. 配置参说明-1——整个配置3.1 配置说明3.2 参考4. 配置说明-2—详细说…

增量更新jar包的方法

由于现在绝大多数服务都采用spring boot,且在打包时一般选择全量包的形式,因此在服务依赖比较多的情况下,更新/添加其中的一个文件时,会造成很大的麻烦,比如一个服务打完包后,jar文件的体积可能在200M左右,因此在网络条件不好的情况下&#xff0c;频繁更新服务包还是比较麻烦的…

http/HTTPS相关的一些知识

2、http和https HTTP&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。HTTP 是应用层协议&#xff0c;它以 TCP&#xff08;传输层&#xff09;作为底层协议&#xff0c;默认端口为 80。 http的通信过程&#xff1a;服务器在80端口等待客户的请…

联想Thinkpad X1 Carbon (7th Gen)电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。硬件型号驱动情况主板Thinkpad X1 Carbon处理器Intel Core i5-10210U (formerly Comet Lake)已驱动内存8GB DDR3 (or something like that)已驱动硬盘WDC PC SN730 SDBQNTY-256G-1001已驱动显卡Intel UHD 620Nvidia GeForce…

【AcWing-Python-785】快速排序

题目&#xff1a;https://www.acwing.com/problem/content/description/787/对应视频讲解&#xff1a;https://www.acwing.com/video/227/题目描述注意本题数据已加强。快速排序过程中&#xff0c;如果每次取区间起点或者终点作为分界点&#xff0c;则会超时。分界点换成随机值…

自动化测试工具airtest之上传文件或图片(web自动化上传图片)

web自动化测试图片上传的方法&#xff1a; 第一种为当具有input标签时&#xff0c;如&#xff1a; <input type"file" name"file" multiple"multiple"> 这类可以通过selenium中的send_keys()上传 直接实现&#xff1a; driver.find_eleme…

成功“拿捏”金三银四!汇总Java面试突击班后的面试小册

最近很多同学已经开始进行今年的面试了&#xff0c;好多同学说&#xff0c;想要今年最新版的Java面试突击班的内容话说回来&#xff0c;今天给大家分享的就是咱们面试突击班的文字PDF版本&#xff0c;下面是文字版的分享大家可以详细往下看&#xff01;由于文章的篇幅有限&…

常见web安全漏洞-暴力破解,xss,SQL注入,csrf

1&#xff0c;暴力破解 原理&#xff1a; 使用大量的认证信息在认证接口进行登录认证&#xff0c;知道正确为止。为提高效率一般使用带有字典的工具自动化操作 基于表单的暴力破解 --- 若用户没有安全认证&#xff0c;直接进行抓包破解。 验证码绕过 on server ---验证码校验在…

局域网下mac与win通过ssh互联(端口映射)

目录一、前置条件ip查看关闭防火墙二、win端ssh连接mac三、mac端ssh连接win四、mac端ssh连接win上的linux虚拟机此文章欢迎访问我的个人博客&#xff1a;https://qiandao.space/archives/portmapping mac端ssh连接win mac端ssh连接win上的linux虚拟机 win端ssh连接mac 日常开发…

【知识蒸馏】知识蒸馏(Knowledge Distillation)技术详解

参考论文&#xff1a;Knowledge Distillation: A Survey 1.前言 ​ 近年来&#xff0c;深度学习在学术界和工业界取得了巨大的成功&#xff0c;根本原因在于其可拓展性和编码大规模数据的能力。但是&#xff0c;深度学习的主要挑战在于&#xff0c;受限制于资源容量&#xff0…

Unity——使用铰链关节制作悬挂物体效果

目的在场景中创建一个悬挂的物体&#xff0c;是把多个模型悬挂在一起可以自由摇摆&#xff0c;类似链条的效果效果图前言什么是铰链关节&#xff1f;铰链关节 将两个刚体&#xff08;Rigid body&#xff09;组会在一起&#xff0c;从而将其约束为如同通过铰链连接一样进行移动。…