打印日志
This commit is contained in:
parent
a0a5f83734
commit
4a436f490d
@ -0,0 +1,99 @@
|
|||||||
|
package com.qiuguo.iot.base.filter;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.UUID;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.logging.log4j.ThreadContext;
|
||||||
|
import org.reactivestreams.Publisher;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.io.buffer.DataBuffer;
|
||||||
|
import org.springframework.core.io.buffer.DataBufferFactory;
|
||||||
|
import org.springframework.core.io.buffer.DataBufferUtils;
|
||||||
|
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import org.springframework.web.server.WebFilter;
|
||||||
|
import org.springframework.web.server.WebFilterChain;
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@Slf4j
|
||||||
|
public class LogWebFilter implements WebFilter {
|
||||||
|
@Override
|
||||||
|
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
ThreadContext.put("logid", UUID.randomUUID().toString());
|
||||||
|
ServerHttpRequest request = exchange.getRequest();
|
||||||
|
String ip = request.getRemoteAddress().getHostName();
|
||||||
|
String m = request.getMethod().toString();
|
||||||
|
|
||||||
|
log.info("api start time:{} ip:{} method:{} url:{} param:{} headers:{}",
|
||||||
|
startTime,
|
||||||
|
ip,
|
||||||
|
m,
|
||||||
|
request.getPath(),
|
||||||
|
request.getQueryParams(),
|
||||||
|
request.getHeaders());
|
||||||
|
|
||||||
|
ServerWebExchange.Builder ex = exchange.mutate();
|
||||||
|
ex.response(getResponse(exchange));
|
||||||
|
|
||||||
|
if(!request.getMethod().equals(HttpMethod.GET) && !request.getMethod().equals(HttpMethod.DELETE)){
|
||||||
|
ex.request(getRequest(exchange));
|
||||||
|
}
|
||||||
|
return chain.filter(ex.build()).doFinally(signalType -> {
|
||||||
|
long endTime = System.currentTimeMillis();
|
||||||
|
log.info("api end time:{}, total time:{}", endTime, endTime - startTime);
|
||||||
|
ThreadContext.clearAll();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private ServerHttpRequest getRequest(ServerWebExchange exchange){
|
||||||
|
ServerHttpRequest request = exchange.getRequest();
|
||||||
|
return new ServerHttpRequestDecorator(request){
|
||||||
|
@Override
|
||||||
|
public Flux<DataBuffer> getBody() {
|
||||||
|
Flux<DataBuffer> body = this.getDelegate().getBody();
|
||||||
|
return body.map(dataBuffer -> {
|
||||||
|
log.info("request:{}", dataBuffer.toString(StandardCharsets.UTF_8));
|
||||||
|
return dataBuffer;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private ServerHttpResponse getResponse(ServerWebExchange exchange){
|
||||||
|
ServerHttpResponse response = exchange.getResponse();
|
||||||
|
return new ServerHttpResponseDecorator(response){
|
||||||
|
@Override
|
||||||
|
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body){
|
||||||
|
if (body instanceof Flux) {
|
||||||
|
Flux<? extends DataBuffer> fluxBody = Flux.from(body);
|
||||||
|
return super.writeWith(fluxBody.buffer().map(dataBuffers -> {
|
||||||
|
DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory();
|
||||||
|
DataBuffer joinBuffer = dataBufferFactory.join(dataBuffers);
|
||||||
|
byte[] returnContent = new byte[joinBuffer.readableByteCount()];
|
||||||
|
joinBuffer.read(returnContent);
|
||||||
|
DataBufferUtils.release(joinBuffer);
|
||||||
|
String returnStr = new String(returnContent, StandardCharsets.UTF_8);
|
||||||
|
log.info("response:{}", returnStr);
|
||||||
|
return response.bufferFactory().wrap(returnContent);
|
||||||
|
}));
|
||||||
|
}else if(body instanceof Mono){
|
||||||
|
Mono<DataBuffer> monoBody = Mono.from(body);
|
||||||
|
return super.writeWith(monoBody.map(dataBuffer -> {
|
||||||
|
log.info("response:{}", dataBuffer.toString(StandardCharsets.UTF_8));
|
||||||
|
return response.bufferFactory().wrap(dataBuffer.toString(StandardCharsets.UTF_8).getBytes());
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
return super.writeWith(body);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
package com.qiuguo.iot.data.resp.device;
|
package com.qiuguo.iot.data.resp.device;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,33 +0,0 @@
|
|||||||
package com.qiuguo.iot.user.api.filter;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.util.MultiValueMap;
|
|
||||||
import org.springframework.web.server.ServerWebExchange;
|
|
||||||
import org.springframework.web.server.WebFilter;
|
|
||||||
import org.springframework.web.server.WebFilterChain;
|
|
||||||
import reactor.core.publisher.Mono;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* XXX
|
|
||||||
*
|
|
||||||
* @author weiyachao
|
|
||||||
* @since 2023/8/8 10:27
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
@Slf4j
|
|
||||||
public class LogFilter implements WebFilter {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
|
||||||
// 获取请求路径和参数
|
|
||||||
String path = exchange.getRequest().getPath().toString();
|
|
||||||
MultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();
|
|
||||||
log.info("path------{}", path);
|
|
||||||
log.info("queryParams-------{}", queryParams);
|
|
||||||
log.info("getMethodValue-------{}", exchange.getRequest().getMethodValue());
|
|
||||||
log.info("headers-------{}", exchange.getRequest().getHeaders().entrySet());
|
|
||||||
return chain.filter(exchange); // 继续请求链
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user