0%

log4j2动态修改日志级别

有时候需要在线上环境排查问题,而一般情况下为了减少日志的输出,设置的日志级别较高,此时就需要一些方法来动态的调低日志级别排查问题。在log4j2中提供了Configurator来修改日志配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 获取日志级别
@GetMapping(value = "/getLogLevel")
@ResponseBody
public String getLogLevel(@RequestParam(value = "package") String packageName) {
LOGGER.info("getLoglevel packageName is {}", packageName);
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
return ctx.getLogger(packageName).getLevel().name();
}

// 设置日志级别
@PostMapping(value = "/setLoglevel")
@ResponseBody
public String setLoglevel(@RequestParam("loglevel") String logLevel, @RequestParam(value = "package") String packageName) {

LOGGER.info("setLoglevel packageName is {},logLevel is {}", packageName, logLevel);
try {
Configurator.setLevel(packageName, Level.valueOf(logLevel));
} catch (Exception e) {
LOGGER.error("设置失败 setLoglevel packageName is {},logLevel is {}", packageName, logLevel, e);
return "fail";
}
return "success";
}

python JSON解析

系统的记录的请求日志是json格式的,想在服务器上直接分析一下该日志,如果用linux命令的话太复杂了,还是使用python来比较简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python3

import json

# 写入 JSON 数据
# with open('data.json', 'w') as f:
# json.dump(data, f)

file_path = "/data/req_resp.log"
file = open(file_path,"r")
# 读取所有行
lines = file.readlines()
for line in lines:
# print(type(line))
#转为json
data = json.loads(line)
# print(type(data))
# 获取timeSpent字段 在python3中判断是否存在某个字段 if 'timeSpent' in data
timeSpent = data['timeSpent']
# 只打印超过150ms的请求信息
if timeSpent > 150:
print (data)

TCP拥塞控制

拥塞控制考虑的是整个网络,全局性的考虑

拥塞控制的算法

  • 慢启动算法 由小到大逐渐增加发送数据量,每收到一个报文确认,就加一。增长到慢启动阈值就不增长了
  • 拥塞避免算法 当达到慢启动阈值之后,就采用拥塞避免算法,维护了一个拥塞窗口变量,只要网络不拥塞,就试探着拥塞窗口调大

TCP流量控制

流量控制考虑的是点对点的通信量的控制

TCP的流量控制是通过滑动窗口来实现的,通过窗口的大小来控制对方的发送速率

OpenFeign集成OkHttp

OpenFeign本质是HTTP来进行服务调用的,也就是需要集成一个Http客户端。

使用的是Client接口来进行请求的

1
2
3
4
5
6
public interface Client {

// request是封装的请求方式、参数、返回值类型
// options 是连接超时、读取超时等的配置项
Response execute(Request request, Options options) throws IOException;
}

默认是HttpURLConnection方式,也就是jdk中提供的最原始的那个

1
2
3
4
5
6
7
8
public static class Default implements Client {

@Override
public Response execute(Request request, Options options) throws IOException {
HttpURLConnection connection = convertAndSend(request, options);
return convertResponse(connection).toBuilder().request(request).build();
}
}
阅读全文 »