springboot动态调整日志级别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/hetaihe07/article/details/81333332

Spring Boot 在 spring-boot-starter-actuator 模块中提供了日志相关的 EndPoint,通过该 EndPoint 可以在运行时不需要重启服务就可以修改日志的打印级别。

解决了以前修改日志打印级别必须要重启服务的烦恼。

环境信息

  • spring boot 2.0.4.RELEASE(1.5以前的版本不适用该博文)
  • JDK 1.8

POM 信息

<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>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

启用loggers Endpoint

出于安全因素考虑,依赖spring-boot-starter-actuator后,默认值启用了“/health”和“/info”两个 Endpoint
可以通过如下配置启用所有的 endpoint

management.endpoints.web.exposure.include=*

 
 
 
 
  • 1

也可以通过该配置启用指定的 endpoint

management.endpoints.web.exposure.include=loggers,sessions

 
 
 
 
  • 1

查看日志级别

我们可以通过浏览器请求到 http://127.0.0.1:8080/actuator/loggers 来获取支持的日志等级,以及系统默认的日志等和各个包路径对应的日志级别。
ps: 如下结果是精简过的,实际返回值很多

{
    "levels":[
        "OFF",
        "ERROR",
        "WARN",
        "INFO",
        "DEBUG",
        "TRACE"
    ],
    "loggers":{
        "ROOT":{
            "configuredLevel":"INFO",
            "effectiveLevel":"INFO"
        },
        "com":{
            "configuredLevel":null,
            "effectiveLevel":"INFO"
        },
        "com.github":{
            "configuredLevel":null,
            "effectiveLevel":"INFO"
        },
        "com.github.huotaihe":{
            "configuredLevel":null,
            "effectiveLevel":"INFO"
        },
        "com.github.huotaihe.spring":{
            "configuredLevel":null,
            "effectiveLevel":"INFO"
        },
        "com.github.huotaihe.spring.boot":{
            "configuredLevel":null,
            "effectiveLevel":"INFO"
        },
        "com.github.huotaihe.spring.boot.log":{
            "configuredLevel":null,
            "effectiveLevel":"INFO"
        },
        "com.github.huotaihe.spring.boot.log.Application":{
            "configuredLevel":null,
            "effectiveLevel":"INFO"
        }
    }
}

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

配置日志级别

编写日志输出类

编写一个controller 输出各个级别的日志:

注意:日志门面类要使用 commons-log,而不能使用 sl4j;
使用 sl4j 会导致日志级别不生效,具体原因会继续跟进。

package com.github.huotaihe.spring.boot.log;

import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogController {

private final static Logger LOG = LoggerFactory.getLogger(LogController.class);

@GetMapping("/log")
public Map<String, Object> home() {
if(LOG.isTraceEnabled()){
LOG.trace(“trace level log”);
}

<span class="token keyword">if</span><span class="token punctuation">(</span>LOG<span class="token punctuation">.</span><span class="token function">isDebugEnabled</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
  LOG<span class="token punctuation">.</span><span class="token function">debug</span><span class="token punctuation">(</span><span class="token string">"debug level log"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">if</span><span class="token punctuation">(</span>LOG<span class="token punctuation">.</span><span class="token function">isInfoEnabled</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
  LOG<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"info level log"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">if</span><span class="token punctuation">(</span>LOG<span class="token punctuation">.</span><span class="token function">isWarnEnabled</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
  LOG<span class="token punctuation">.</span><span class="token function">warn</span><span class="token punctuation">(</span><span class="token string">"warn level log"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">if</span><span class="token punctuation">(</span>LOG<span class="token punctuation">.</span><span class="token function">isErrorEnabled</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
  LOG<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"error level log"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
Map<span class="token generics function"><span class="token punctuation">&lt;</span>String<span class="token punctuation">,</span> Object<span class="token punctuation">&gt;</span></span> result <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token operator">&lt;</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
result<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"status"</span><span class="token punctuation">,</span> <span class="token string">"good"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
result<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">,</span> <span class="token string">"abc"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
result<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"password"</span><span class="token punctuation">,</span> <span class="token string">"abc"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> result<span class="token punctuation">;</span>

}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

测试日志级别

启动应用并访问http://127.0.0.1:8080/log
控制台打印如图,Spring Boot 默认的 ROOT 日志级别是INFO。
这里写图片描述

修改指定包的日志级别

通过/actuator/loggers端点提供的 POST 请求,修改包路径com.github.huotaihe.spring.boot.log 的日志级别为DEBUG。

header 信息必须添加
Content-Type:application/json

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

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 再次访问http://127.0.0.1:8080/log 得到

这里写图片描述


源代码

github: https://github.com/huotaihe/spring-boot-learn/tree/master/runtime-log-level
参考http://blog.huotaihe.com/2018/12/17/springboot-runtime-log-level/

                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
                </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值