in shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/AbstractLoggingPlugin.java [82:128]
public Mono<Void> doExecute(final ServerWebExchange exchange, final ShenyuPluginChain chain,
final SelectorData selector, final RuleData rule) {
CommonLoggingRuleHandle commonLoggingRuleHandle = AbstractLogPluginDataHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(rule));
boolean desensitized = Boolean.FALSE;
Set<String> keywordSets = Sets.newHashSet();
String dataDesensitizeAlg = DataDesensitizeEnum.MD5_ENCRYPT.getDataDesensitizeAlg();
if (Objects.nonNull(commonLoggingRuleHandle)) {
String keywords = commonLoggingRuleHandle.getKeyword();
desensitized = StringUtils.isNotBlank(keywords) && commonLoggingRuleHandle.getMaskStatus();
if (desensitized) {
Collections.addAll(keywordSets, keywords.split(";"));
dataDesensitizeAlg = Optional.ofNullable(commonLoggingRuleHandle.getMaskType()).orElse(DataDesensitizeEnum.MD5_ENCRYPT.getDataDesensitizeAlg());
LOG.info("current plugin:{}, keyword:{}, dataDesensitizeAlg:{}", pluginEnum().getName(), keywords, dataDesensitizeAlg);
}
}
ServerHttpRequest request = exchange.getRequest();
// control sampling
if (!LogCollectConfigUtils.isSampled(exchange, selector)) {
return chain.execute(exchange);
}
L requestInfo = this.doLogExecute(exchange, selector, rule);
requestInfo.setRequestUri(request.getURI().toString());
requestInfo.setMethod(request.getMethod().name());
requestInfo.setRequestMethod(request.getMethod().name());
requestInfo.setRequestHeader(LogCollectUtils.getHeaders(request.getHeaders()));
requestInfo.setQueryParams(request.getURI().getQuery());
requestInfo.setClientIp(HostAddressUtils.acquireIp(exchange));
requestInfo.setUserAgent(request.getHeaders().getFirst(GenericLoggingConstant.USER_AGENT));
requestInfo.setHost(request.getHeaders().getFirst(GenericLoggingConstant.HOST));
requestInfo.setPath(request.getURI().getRawPath());
requestInfo.setSelectorId(selector.getId());
requestInfo.setRuleId(rule.getId());
requestInfo.setNamespaceId(rule.getNamespaceId());
LoggingServerHttpRequest<L> loggingServerHttpRequest = new LoggingServerHttpRequest<>(request, requestInfo);
LoggingServerHttpResponse<L> loggingServerHttpResponse = new LoggingServerHttpResponse<>(exchange.getResponse(),
requestInfo, this.logCollector(), desensitized, keywordSets, dataDesensitizeAlg);
ServerWebExchange webExchange = exchange.mutate().request(loggingServerHttpRequest)
.response(loggingServerHttpResponse).build();
loggingServerHttpResponse.setExchange(webExchange);
try {
return chain.execute(webExchange).doOnError(loggingServerHttpResponse::logError);
} catch (Exception e) {
loggingServerHttpResponse.logError(e);
throw e;
}
}