SpringBoot实用小技巧之动态设置SpringBoot日志级别

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:   有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置INFO,调试级别用作特殊情况下。此时如果线上想查看调试级别下的日志,又不能更改日志级别后重新发布该怎么办?  Spring Boot提供了日志级别动态配置功能,为我们的线上应用调试提供了很好的机制。
+关注继续查看

  有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置INFO,调试级别用作特殊情况下。此时如果线上想查看调试级别下的日志,又不能更改日志级别后重新发布该怎么办?

  Spring Boot提供了日志级别动态配置功能,为我们的线上应用调试提供了很好的机制。在实际使用中需要结合Spring-Security提供的安全机制来保护Actuator 提供的各种系统级端点的安全访问。

  SpringBoot从版本 1.5.1 之后就提供了基于 spring-boot-starter-actuator 的端点 /loggers。通过该端点可以实现查看系统的 package-path 的日志级别,以及针对特定的 package-path 配置运行中的应用的日志级别的功能。 

  下面对动态调整日志的级别进行设置。

先引入Actuator依赖

  因为是基于 Web 的项目和利用 Actuator 提供的端点来进行配置,因此需要依赖:

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

安全配置

  Actuator 提供的端点(Endpoints),默认是需要安全认证才能够被访问的。因为里面涉及到一些敏感的信息。需要安全认证就需要配置 Spring-Security。为了方便首先配置不需要安全权限的。

  在配置中设置 management.security.enabled=false

GET 请求访问

  我们可以发送GET 请求到 http://localhost:8080/loggers 来获取支持的日志等级,以及系统(ROOT)默认的日志等和各个包路径(com.xxx.commond等)对应的日志级别。

  访问会返回所有的类的日志级别信息。

 

配置特定包的日志级别

通过 /loggers 端点提供的 POST 请求,修改包路径com.xxx.commond的日志级别为DEBUG:

发送POST 请求到  http://localhost:8080/loggers/com.xxx.commond,其中请求 Body 的内容如下:

{
"configuredLevel": "DEBUG"
}
再用GET 访问 http://localhost:8080/loggers/com.xxx.commond查看当前的日志级别:
{
configuredLevel: "DEBUG",
effectiveLevel: "INFO"
}

注意:

通过 /loggers 配置的日志级别在应用重启时会恢复到系统的配置,如果想永久的配置日志的级别还是需要通过logging.level.package-path 来进行配置。

第二种方法就比较简单了,如果你有Actuator作了服务端监控,则可以直接访问此监控服务,然后进入具体要调整日志级别的服务进入Logging,直接进行点击设置即可,非常方便,其实内部帮你做了跟上面一样的请求。

   这样就可以动态的设置调试程序了,而不用重启服务,是不是非常方便。

部分内容引用参见:

https://blog.csdn.net/u014684364/article/details/81289696

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
Java Maven 开发者
SpringBoot日志关系|学习笔记
快速学习SpringBoot日志关系
95 0
SpringBoot日志关系|学习笔记
|
存储 JSON Prometheus
SpringBoot动态修改日志级别
SpringBoot动态修改日志级别
497 0
SpringBoot动态修改日志级别
|
存储 Java API
07、Springboot日志使用
07、Springboot日志使用
07、Springboot日志使用
|
Java Spring
SpringBoot学习笔记-3:第三章 Spring Boot 日志
SpringBoot学习笔记-3:第三章 Spring Boot 日志
SpringBoot学习笔记-3:第三章 Spring Boot 日志
|
XML Java 程序员
SpringBoot2.x系列教程14--SpringBoot整合Log日志功能记录异常信息
前言 在前面的章节中,壹哥 带大家设计了RESTful风格的接口,还生成了在线文档。大家想一下,无论是设计RESTful风格的接口,还是生成Swagger在线接口文档,这些功能其实都可以算作是我们项目开发时搭建的”基础设施“,它们并不是项目的核心业务。这些”基础设施“可以方便我们的项目开发,为项目开发带来不同程度的便利,就好比我们想开个饭店,就得需要有水管、煤气、电等基础设施。 那么在项目开发时,我们还需要什么”基础设施“呢?今天 壹哥 再给大家介绍一个新的”基础设施“---Log日志!想一下,开发时我们需不需要进行项目调试?你的输出结果到底对不对?项目上线后要不要记录生产环境中的异常信息,
545 0
|
存储 Java 应用服务中间件
SpringBoot2.x系列教程04--SpringBoot花样配置之自定义Web端口及开启日志功能
前言 上一章节中,壹哥 带各位玩了个花样配置,设置了一个自定义的Banner图,而且 壹哥 还给各位留了个作业,让大家设计一个苍老师的图片给我看看,是不是都设计好了呢?别忘了发给我共享哦。 今天 壹哥 带各位再学习其他的一些花样技巧,比如设置自定义的Web端口号,启动Log日志功能等,这些可不是花架子了哦,这些都是很有用的实战技巧,这些都是我们项目开发时必须配置的设置。 一. 修改端口号和访问路径 我们知道,在任何一个Web项目中,都需要设置一个Web端口号,比如80、8080、8081等端口号。有的小伙伴说,我就没设置过端口号也没问题啊!你没配置过,那是因为使用的是默认的80或者8080端
197 0
SpringBoot日志基本查看
SpringBoot日志基本查看
1004 0
|
Java Spring
Springboot 同一次调用日志怎么用ID串起来,方便最终查找
Springboot 同一次调用日志怎么用ID串起来,方便最终查找
324 0
Springboot 同一次调用日志怎么用ID串起来,方便最终查找
|
自然语言处理 Java
SpringBoot和@Aspect实现自建Log日志功能
SpringBoot和@Aspect实现自建Log日志功能
SpringBoot和@Aspect实现自建Log日志功能
|
Java 数据库连接 API
SpringBoot的日志【日志框架、日志配置】(超详细)
SpringBoot的日志【日志框架、日志配置】(超详细)
SpringBoot的日志【日志框架、日志配置】(超详细)
相关产品
云迁移中心
推荐文章
更多