前言

为了减少日志频繁打印带来的性能影响,线上环境设置的日志级别一般都相对较高。而当出现生产问题需要排查的时候,可能需要适当降低日志级别(例如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相关端口的权限认证。

此外,如果存在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去访问。

五、发起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端口,我们就可以轻松的实现动态调整系统的日志级别,而不用项目重启。

更多精彩,关注我吧。

SpringBoot动态修改日志级别相关推荐

  1. springboot 日志级别_SpringBoot实战(十三):Admin动态修改日志级别

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性 ...

  2. SpringBoot实战(十三):Spring Boot Admin 动态修改日志级别

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性 ...

  3. Spring Boot 2动态修改日志级别

    本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本. 作为程序猿,定位问题是我们的日常工作,而日志是我们定位问题非常重要的依据.传统方式定位问题时,往往是如下 ...

  4. 使用RestTemplate模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别

    Spring 与 Restful 整合才是微架构的核心,虽然在整个 SpringBoot(SpringCloud)之中提供有大量的 服务方便整合,但是这些 整合都不如 Rest 重要,因为 Rest ...

  5. 日志级别_SpringBoot实战(十三):Admin动态修改日志级别

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性 ...

  6. 求你了,别再随便打日志了,教你动态修改日志级别!

    GitHub 19k Star 的Java工程师成神之路,不来了解一下吗! 之前写过一篇文章<明明有自动清理,日志还是把我的服务干爆了!>,介绍过一次大促故障,是因为日志量激增,导致服务器 ...

  7. log4j2动态修改日志级别及拓展性使用

    一.供参考的完整日志配置 <?xml version="1.0" encoding="UTF-8"?><!-- 配置LoggerConfig, ...

  8. springboot动态调整日志级别

    1.springboot使用log4j2 springboot使用的common-logging,底层兼容各种日志框架如,log4j2,slf4,logback等,默认底层使用的是logback,我们 ...

  9. Spring Boot动态修改日志级别

    1. pom中引入 org.springframework.boot       spring-boot-starter-actuator 2. 发送POST请求: 地址: http://[服务地址] ...

最新文章

  1. ubuntu安装QQ
  2. LeetCode--023--合并K个排序链表
  3. android 回收站设计,android-如何根据屏幕尺寸设置回收站视图项目的宽度尺寸?...
  4. html自定义标签提示,用简单的jquery+CSS创建自定义的a标签title提示tooltip_HTML/Xhtml_网页制作...
  5. 51Nod 1453 抽彩球
  6. 【杂谈】有三AI秋季划增加生成对抗网络小组,你准备好大GAN一场了吗
  7. 循序渐进——NAnt构建实例
  8. MFC子对话框初始化问题_从一个“断言”报警说起
  9. python编译成class_django为Form生成的label标签添加class方式
  10. matlab求迟滞,MATLAB PI迟滞模型问题
  11. 【渝粤题库】广东开放大学 经济学基础 形成性考核
  12. 海康威视第一季度营收165亿元 净利润22.84亿元
  13. 理解C语言——从小菜到大神的晋级之路(1)——引言:C语言的前世今生
  14. IntelliJ IDEA15,PhpStorm10,WebStorm11激活破解
  15. python必备入门代码-学习Python必备的八大知识板块,学好这些你就算入门啦~
  16. bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换)
  17. uniapp页面跳转出现白屏(APP与小程序)
  18. bin文件转化为csv文件
  19. Rancher搭建Longhorn分布式存储
  20. OpenCV参考手册之Mat类详解(二)

热门文章

  1. 便利贴--13{随鼠标移动的canvas,未完成}
  2. FIR滤波器以及吉布斯效应
  3. canvas读取跨域图片像素失败 Failed to execute getImageData The canvas has been tainted by cross-origin data
  4. 如何将扫描的PDF转Word?这两种方法超简单
  5. oracle数据库offline,Oracle表空间Offline的三种参数详述
  6. 手机连接Wi-Fi能正常上网但托盘信号栏图标带“x”
  7. 【LeetCode 622 链表专项】设计循环队列
  8. linux分区方案 500g,Linux分区方案最节省的分区方案
  9. git(gitlab)子模块功能在团队协同开发和生产环境中的应用(git,gitlab,TortoiseGit,CI/CD,Jenkins,docker-compose,分支合并,开发环境,测试环境)
  10. 公司来了个大神,服务器缩减一半,性能反而提升7倍!跪了...