refactor(log/httptrace-pro): 优化日志记录

1.新增是否打印配置,开启后可打印访问日志(类似于 Nginx access log)
2.TIME_TAKEN 请求耗时,调整为必然记录
3.REQUEST_PARAM 请求参数、RESPONSE_PARAM 响应参数调整为默认记录
4.包含信息配置:BODY 和 PARAM 调整为互斥,包含 BODY 则对应 PARAM 不记录
5.请求 URI 不再记录协议、域名等信息
6.修复部分请求、响应信息记录错误
This commit is contained in:
2023-12-23 22:47:44 +08:00
parent dac525f177
commit c4007fa290
7 changed files with 51 additions and 35 deletions

View File

@@ -42,17 +42,17 @@ public enum Include {
MODULE,
/**
* 请求头
* 请求头(默认)
*/
REQUEST_HEADERS,
/**
* 请求体
* 请求体(如包含请求体,则请求参数无效)
*/
REQUEST_BODY,
/**
* 请求参数
* 请求参数(默认)
*/
REQUEST_PARAM,
@@ -72,32 +72,29 @@ public enum Include {
OS,
/**
* 响应头
* 响应头(默认)
*/
RESPONSE_HEADERS,
/**
* 响应体
* 响应体(如包含响应体,则响应参数无效)
*/
RESPONSE_BODY,
/**
* 响应参数
* 响应参数(默认)
*/
RESPONSE_PARAM,
/**
* 耗时
*/
TIME_TAKEN;
;
private static final Set<Include> DEFAULT_INCLUDES;
static {
Set<Include> defaultIncludes = new LinkedHashSet<>();
defaultIncludes.add(Include.TIME_TAKEN);
defaultIncludes.add(Include.REQUEST_HEADERS);
defaultIncludes.add(Include.RESPONSE_HEADERS);
defaultIncludes.add(Include.REQUEST_PARAM);
defaultIncludes.add(Include.RESPONSE_PARAM);
DEFAULT_INCLUDES = Collections.unmodifiableSet(defaultIncludes);
}

View File

@@ -131,7 +131,7 @@ public class LogRecord {
public LogRecord finish(Clock clock, RecordableHttpResponse response, Set<Include> includes) {
LogRequest logRequest = new LogRequest(this.request, includes);
LogResponse logResponse = new LogResponse(response, includes);
Duration duration = (includes.contains(Include.TIME_TAKEN)) ? Duration.between(this.timestamp, Instant.now(clock)) : null;
Duration duration = Duration.between(this.timestamp, Instant.now(clock));
return new LogRecord(this.timestamp, logRequest, logResponse, duration);
}
}

View File

@@ -87,8 +87,11 @@ public class LogRequest {
this.uri = request.getUri();
this.ip = request.getIp();
this.headers = (includes.contains(Include.REQUEST_HEADERS)) ? request.getHeaders() : null;
this.body = (includes.contains(Include.REQUEST_BODY)) ? request.getBody() : null;
this.param = (includes.contains(Include.RESPONSE_PARAM)) ? request.getParam() : null;
if (includes.contains(Include.REQUEST_BODY)) {
this.body = request.getBody();
} else if (includes.contains(Include.REQUEST_PARAM)) {
this.param = request.getParam();
}
this.address = (includes.contains(Include.IP_ADDRESS)) ? IpUtils.getAddress(this.ip) : null;
String userAgentString = ExceptionUtils.exToNull(() -> this.headers.get(HttpHeaders.USER_AGENT).get(0));
this.browser = (includes.contains(Include.BROWSER)) ? ServletUtils.getBrowser(userAgentString) : null;

View File

@@ -52,8 +52,11 @@ public class LogResponse {
public LogResponse(RecordableHttpResponse response, Set<Include> includes) {
this.status = response.getStatus();
this.headers = (includes.contains(Include.REQUEST_HEADERS)) ? response.getHeaders() : null;
this.body = (includes.contains(Include.REQUEST_BODY)) ? response.getBody() : null;
this.param = (includes.contains(Include.RESPONSE_PARAM)) ? response.getParam() : null;
this.headers = (includes.contains(Include.RESPONSE_HEADERS)) ? response.getHeaders() : null;
if (includes.contains(Include.RESPONSE_BODY)) {
this.body = response.getBody();
} else if (includes.contains(Include.RESPONSE_PARAM)) {
this.param = response.getParam();
}
}
}