SpringBoot动态修改日志级别

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringBoot动态修改日志级别

前言


为了减少日志频繁打印带来的性能影响,线上环境设置的日志级别一般都相对较高。而当出现生产问题需要排查的时候,可能需要适当降低日志级别(例如DEBUG)来打印更多的日志信息帮助定位问题。

传统的做法一般是:

1、配置里修改日志级别

2、重启应用

3、问题复现查看报错日志排查问题


这个过程需要重启应用,比较麻烦,效率较低,而且针对大型在线项目,不可能随便停机重启。那么有没有一种方式在不重启应用的情况下实现动态修改日志级别呢?


下面,让老万教你如何通过SpringBoot的actuator组件来实现动态修改日志级别。


一、添加依赖


<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>


二、配置actuator暴露的端口


#启用actuator端口
management.endpoints.enabled-by-default=fasle
#设置actuator的访问根路径,默认是/actuator
management.endpoints.web.base-path=/message
#启用的端点
management.endpoints.web.exposure.include=loggers


这里我修改了actuator的默认访问路径/actuator,改为/message,为的是和项目的基础访问路径保存一致。


启用端口的2中配置方法:

方式一:(推荐)

management.endpoints.web.exposure.include=loggers


方式二:(这种方式测试没有生效)

management.endpoint.loggers.enabled=true


补充:如何禁用info端口

management.endpoints.enabled-by-default=false

management.endpoint.info.enabled=true


关于actuator组件被称为spring boot的4大组件之一,功能强大,大家在网上自己找些资料进一步了解。


actuator的endpoint端口说明:

ID

描述

默认启用

auditevents

显示当前应用程序的审计事件信息

Yes

beans

显示一个应用中所有Spring Beans的完整列表

Yes

conditions

显示配置类和自动配置类(configuration and auto-configuration classes)的状态及它们被应用或未被应用的原因

Yes

configprops

显示一个所有@ConfigurationProperties的集合列表

Yes

env

显示来自Spring的 ConfigurableEnvironment的属性

Yes

flyway

显示数据库迁移路径,如果有的话

Yes

health

显示应用的健康信息(当使用一个未认证连接访问时显示一个简单的’status’,使用认证连接访问则显示全部信息详情)

Yes

info

显示任意的应用信息

Yes
liquibase

展示任何Liquibase数据库迁移路径,如果有的话

Yes

metrics

展示当前应用的metrics信息

Yes

mappings

显示一个所有@RequestMapping路径的集合列表

Yes

scheduledtasks

显示应用程序中的计划任务

Yes
sessions

允许从Spring会话支持的会话存储中检索和删除(retrieval and deletion)用户会话。使用Spring Session对反应性Web应用程序的支持时不可用。

Yes
shutdown

允许应用以优雅的方式关闭(默认情况下不启用)

No

threaddump

执行一个线程dump

Yes

如果使用web应用(Spring MVC, Spring WebFlux, 或者 Jersey),你还可以使用以下端点:

ID

描述

默认启用

heapdum

返回一个GZip压缩的hprof堆dump文件

Yes

jolokia

通过HTTP暴露JMX beans(当Jolokia在类路径上时,WebFlux不可用)

Yes

logfile

返回日志文件内容(如果设置了logging.file或logging.path属性的话),支持使用HTTP Range头接收日志文件内容的部分信息

Yes

prometheus

以可以被Prometheus服务器抓取的格式显示metrics信息

Yes


要更改公开哪些端点,请使用以下技术特定的include和exclude属性:

Property

Default

management.endpoints.jmx.exposure.exclude

*

management.endpoints.jmx.exposure.include

*

management.endpoints.web.exposure.exclude

*

management.endpoints.web.exposure.include

info, health


include属性列出了公开的端点的ID,

exclude属性列出了不应该公开的端点的ID

exclude属性优先于include属性。包含和排除属性都可以使用端点ID列表进行配置。

*可以用来选择所有端点。

例如,要通过HTTP公开除env和beans端点之外的所有内容,请使用以下属性:

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans


三、关闭鉴权


一般我们会将actuator和spring security鉴权组件结合使用,防止这些功能端口被随便调用。由于这里是功能演示,先放开actuator相关端口的权限认证。

74.png


此外,如果存在Spring Security,则需要添加自定义安全配置,以允许对端点进行未经身份验证的访问,如以下示例所示:

放开所有Endpoint端点进行匹配

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
    .anyRequest().permitAll()
}
}


四 、通过/loggers端口查看日志级别


请求链接:http://localhost:8090/message/loggers

注意上面我说过的,我调整了management.endpoints.web.base-path=/message。如果没有设置此参数,则使用默认的/actuator去访问。

73.png


五、发起http请求修改日志级别


这里演示,修改目录com.wxswj.provider.message.controller的日志级别为debug

请求类型为POST,参数格式是JSON

curl -H "Content-Type: application/json" -X POST --data 
'
{
    "configuredLevel": "DEBUG"
}
'

http://localhost:8090/message/loggers/com.wxswj.provider.message.controller


大家可以在服务器上通过curl发起http请求,或者通过Postman发起请求。

curl -H "Content-Type: application/json" -X POST --data '{"configuredLevel": "DEBUG"}' http://localhost:8090/loggers/com.wxswj.provider.message.controller


六、查询日志级别修改结果


http://localhost:8090/message/loggers/com.wxswj.provider.message.controller

{
"configuredLevel": "DEBUG",
"effectiveLevel": "DEBUG"
}

说明我们的修改日志级别的请求生效。


总结


通过整合spring boot的actuator组件,公开对应的/loggers端口,我们就可以轻松的实现动态调整系统的日志级别,而不用项目重启。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
91 5
|
2月前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
52 1
|
2月前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
56 1
|
3月前
|
Java Maven Spring
SpringBoot日志整合
SpringBoot日志整合
33 2
|
3月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
234 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
3月前
|
SQL XML 监控
SpringBoot框架日志详解
本文详细介绍了日志系统的重要性及其在不同环境下的配置方法。日志用于记录系统运行时的问题,确保服务的可靠性。文章解释了各种日志级别(如 info、warn、error 等)的作用,并介绍了常用的日志框架如 SLF4J 和 Logback。此外,还说明了如何在 SpringBoot 中配置日志输出路径及日志级别,包括控制台输出与文件输出的具体设置方法。通过这些配置,开发者能够更好地管理和调试应用程序。
|
4月前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
312 1
|
5月前
|
监控 Java Serverless
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
|
2月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
440 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
24天前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。