动态配置Spring Boot日志级别的全步骤
作者:细品热咖啡 发布时间:2023-01-29 01:57:19
前言
项目使用了SpringBoot构建项目。下面对动态调整日志的级别进行记录。
从版本 1.5.1 之后就提供了基于 spring-boot-starter-actuator 的端点 /loggers。通过该端点可以实现查看系统的 package-path 的日志级别,以及针对特定的 package-path 配置运行中的应用的日志级别的功能。
Actuator 依赖
pom 依赖
因为是基于 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:8091/loggers 来获取支持的日志等级,以及系统(ROOT)默认的日志等和各个包路径(com.mall.goods.zhongkui
等)对应的日志级别。
{
levels: [
"OFF",
"FATAL",
"ERROR",
"WARN",
"INFO",
"DEBUG",
"TRACE"
],
loggers: {
ROOT: {
configuredLevel: "INFO",
effectiveLevel: "INFO"
},
com.mall.goods.zhongkui: {
configuredLevel: "DEBUG",
effectiveLevel: "DEBUG"
},
com.mall.goods.zhongkui.mallcpswomai.mapper: {
configuredLevel: "DEBUG",
effectiveLevel: "DEBUG"
}
}
}
配置日志级别
编写日志输出类
编写一个controller 输出各个级别的日志:
@Slf4j
@Controller
public class TestController {
@GetMapping(value = "/testLog")
public String testLog() {
log.info("---------------------------");
log.debug("debug debug");
log.info("info info info");
log.warn("warn warn warn");
log.error("error error error ");
log.info("---------------------------");
return "ok";
}
}
查看日志级别
启动应用访问 http://localhost:8091/ 得到:
[2018-07-30 18:05:42.868] [http-nio-8091-exec-2] INFO com.mall.goods.zhongkui.mallcpswomai.web.OrderRelationController----------------------------
[2018-07-30 18:05:42.869] [http-nio-8091-exec-2] DEBUG com.mall.goods.zhongkui.mallcpswomai.web.OrderRelationController-debug debug
[2018-07-30 18:05:42.869] [http-nio-8091-exec-2] INFO com.mall.goods.zhongkui.mallcpswomai.web.OrderRelationController-info info info
[2018-07-30 18:05:42.869] [http-nio-8091-exec-2] WARN com.mall.goods.zhongkui.mallcpswomai.web.OrderRelationController-warn warn warn
[2018-07-30 18:05:42.869] [http-nio-8091-exec-2] ERROR com.mall.goods.zhongkui.mallcpswomai.web.OrderRelationController-error error error
[2018-07-30 18:05:42.869] [http-nio-8091-exec-2] INFO com.mall.goods.zhongkui.mallcpswomai.web.OrderRelationController----------------------------
Spring Boot 默认的 ROOT 日志级别是INFO。
配置特定包的日志级别
通过 /loggers 端点提供的 POST 请求,修改包路径com.mall.goods.zhongkui
的日志级别为INFO。
* 发送POST 请求到 http://localhost:8091/com.mall.goods.zhongkui,其中请求 Body 的内容如下:
{
"configuredLevel": "INFO"
}
•GET 访问 /loggers/com.mall.goods.zhongkui 查看当前的日志级别:
{
configuredLevel: "INFO",
effectiveLevel: "INFO"
}
•再次访问 http://localhost:8091/ 得到:需要注意的是,通过 /loggers 配置的日志级别在应用重启时会恢复到系统的配置。如果想永久的配置日志的级别还是需要通过logging.level.package-path
来进行配置。
总结
Spring Boot 提供的日志级别动态配置功能,为我们的线上应用调试提供了很好的机制。在实际使用中需要结合 Spring-Security 提供的安全机制来保护Actuator 提供的各种系统级端点。
参考
1.Configure a Logger
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。
来源:https://blog.csdn.net/u014684364/article/details/81289696
猜你喜欢
- 本文实例为大家分享了Java实现坦克大战小游戏的具体代码,供大家参考,具体内容如下创作背景:n年前的学期末课题设计,从b站上学的,一个代码一
- 本文为大家分享了WebSocket实现Web聊天室的具体代码,供大家参考,具体内容如下一.客户端JS代码如下:/* * 这部分
- /// <summary> /// 遍历Co
- 线程的两种创建方式及优劣比较1、通过实现Runnable接口线程创建(1).定义一个类实现Runnable接口,重写接口中的run()方法。
- 前言在Web应用开发过程中,一般都涵盖一些常用功能的实现,如数据库访问、异常处理、消息队列、缓存服务、OSS服务,以及接口日志配置,接口文档
- 缘起经过前面三章的入门,我们大概了解了Mybatis的主线逻辑是什么样子的,在本章中,我们将正式进入Mybatis的源码海洋。Mybatis
- 在Java移动文件夹及其所有子文件与子文件夹可以有如下的一段简单的方法来说明:public static void moveFolder(S
- 概述 wsimport是jdk自带的命令,可以根据wsdl文档生成客户端中间代码,基于生成的代码编写客户端,可以省很多麻烦。先看两张截图:使
- 已知两个链表list1和list,2,各自非降序排列,将它们合并成另外一个链表list3,并且依然有序,要求保留所有节点。实现过程中,lis
- 本文实例为大家分享了android自定义环形对比图的具体代码,供大家参考,具体内容如下1.首先在res/values里创建一个attr.xm
- synchronized都问啥?如果Java面试有什么是必问的,synchronized必定占据一席之地。初出茅庐时synchronized
- Maven 错误找不到符号问题,通常有三种原因: 1. 可能项目编码格式不统一。 2. 可能项目编码使用的JDK版本不统一。 3
- 先上图:新建好springboot项目之后这里没生成pom.xml文件我开始试了一下网上的方法,在新建的时候修改choose spring
- 背景大家在使用Selenium + Chromedriver爬取网站信息的时候,以为这样就能做到不被网站的反爬虫机制发现。但是实际上很多参数
- Java-关键字:final1 .final可以用来修饰的结构:类、方法、变量2.final 用来修饰一个类:此类不能被其他类所继承比如:S
- 1、动态SQL片段通过SQL片段达到代码复用 <!-- 动态条件分页查询 --> <sql i
- 首先,良好的编码规范非常重要。在 java 程序中,访问速度、资源紧张等问题的大部分原因,都是代码不规范造成的。单例的使用场景单例模式对于减
- 前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果。本来没
- 一、常见问题所有的final修饰的字段都是编译期常量吗?如何理解private所修饰的方法是隐式的final?说说final类型的类如何拓展
- 前言Apache POI [1] 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Mi