引言

日志是我们定位问题的关键,尤其是在线上。但是有时我们输出的日志信息不够充足,给排查问题带来了极大的困扰。如果能够不重启应用,就能动态调整日志级别的话,无疑给我们排查问题带来了极大的帮助。 Spring Boot 1.5 从开始,Spring Boot Actuator 组件就已提供动态修改日志级别的能力。在这里基于SpringMVC封装了log-config-core的jar,提供了更丰富的功能。

项目地址在我的GitHub:https://github.com/mx-go/log-config-core/tree/master

项目必须使用logback作为日志输出组件。

引入Maven坐标

1
2
3
4
5
<dependency>
<groupId>com.github.mx-go</groupId>
<artifactId>log-config-core</artifactId>
<version>1.0.0</version>
</dependency>

使用

jar包中的LogbackServlet通过web-fragment会自动注册到服务中,jar包提供以下功能:

  • 获取服务所有logger level信息
  • 获取单个logger level信息
  • 设置指定logger的logger level
  • 获取所有日志文件信息
  • 查询某日志文件最近N行日志

获取服务所有logger level信息

通过访问:http://ip:prot/logback/all GET 无参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
访问:http://localhost:8081/logback/all
返回:
{
"data": [
{
"level": "INFO",
"logger": "ROOT"
},
{
"level": "INFO",
"logger": "com.rainbowhorse.open"
},
{
"level": "INFO",
"logger": "org.hibernate"
},
{
"level": "INFO",
"logger": "org.springframework"
}
],
"status": 0
}

获取单个logger level信息

通过访问:http://ip:prot/logback/getLogger GET 参数logger[必填]

1
2
3
4
5
6
7
8
9
访问:http://localhost:8081/logback/getLogger?logger=com.rainbowhorse.open
返回:
{
"data": {
"level": "INFO",
"logger": "com.rainbowhorse.open"
},
"status": 0
}

设置指定logger的logger level

通过访问:http://ip:prot/logback/setLevel GET 参数logger[必填]、level[选填]、newLevel[必填]

1
2
3
4
5
6
访问:http://localhost:8081/logback/setLevel?newLevel=DEBUG&logger=com.rainbowhorse.open
返回:
{
"data": "修改日志level成功",
"status": 0
}

获取所有日志文件信息

通过访问:http://ip:prot/logback/getLogFiles GET 无参数

1
2
3
4
5
6
7
8
9
10
11
12
13
访问:http://localhost:8081/logback/getLogFiles
返回:
{
"data": [
{
"parent": "../logs",
"size": 36828,
"name": "admin.log",
"lastModified": "2019-05-11 17:03:59"
}
],
"status": 0
}

查询某日志文件最近N行日志

通过访问:http://ip:prot/logback/peekFile GET 参数file[必填]、num[选填,默认1000]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
访问:http://localhost:8081/logback/peekFile?file=admin.log&num=10
返回:
{
"data": [
"2019-05-11 17:13:00,212 WARN [http-nio-8081-exec-6] change logger level start! logger: com.rainbowhorse.open, oldLevel: , newLevel: DEBUG",
"2019-05-11 17:13:03,778 DEBUG [http-nio-8081-exec-7] debug",
"2019-05-11 17:13:03,778 INFO [http-nio-8081-exec-7] info",
"2019-05-11 17:13:03,778 ERROR [http-nio-8081-exec-7] error",
"2019-05-11 17:13:18,337 INFO [http-nio-8081-exec-9] logback servlet request uri: /setLevel",
"2019-05-11 17:13:18,337 WARN [http-nio-8081-exec-9] change logger level start! logger: com.rainbowhorse.open, oldLevel: , newLevel: INFO",
"2019-05-11 17:13:21,441 INFO [http-nio-8081-exec-10] info",
"2019-05-11 17:13:21,442 ERROR [http-nio-8081-exec-10] error",
"2019-05-11 17:13:25,276 INFO [http-nio-8081-exec-2] logback servlet request uri: /getLogFiles",
"2019-05-11 17:13:30,515 INFO [http-nio-8081-exec-3] logback servlet request uri: /peekFile"
],
"status": 0
}