Skip to content
This repository was archived by the owner on Jan 13, 2025. It is now read-only.

Commit 68f7e0f

Browse files
committed
[feat][*][*]: add interceptor to log request trace
1 parent 6c49c1e commit 68f7e0f

File tree

3 files changed

+63
-8
lines changed

3 files changed

+63
-8
lines changed

ps-bootstrap/src/main/resources/logback-spring.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,35 @@
8585
</filter>
8686
</appender>
8787

88+
<appender name="reqTraceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
89+
<file>${logging.path}/${APP_NAME}/req_trace.log</file>
90+
<encoder>
91+
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
92+
%msg%n
93+
</pattern>
94+
<charset>UTF-8</charset>
95+
</encoder>
96+
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
97+
<FileNamePattern>${logging.path}/${APP_NAME}/req_trace.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
98+
<maxHistory>7</maxHistory>
99+
<maxFileSize>50MB</maxFileSize>
100+
<totalSizeCap>500MB</totalSizeCap>
101+
<cleanHistoryOnStart>true</cleanHistoryOnStart>
102+
</rollingPolicy>
103+
</appender>
104+
<appender name="full-req-trace" class="ch.qos.logback.classic.AsyncAppender">
105+
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
106+
<discardingThreshold>0</discardingThreshold>
107+
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
108+
<queueSize>256</queueSize>
109+
<!-- 添加附加的appender,最多只能添加一个 -->
110+
<appender-ref ref="reqTraceAppender"/>
111+
</appender>
112+
113+
<logger name="req-trace" level="INFO" additivity="false">
114+
<appender-ref ref="full-req-trace"/>
115+
</logger>
116+
88117
<root level="INFO">
89118
<appender-ref ref="CONSOLE"/>
90119
<appender-ref ref="full-application"/>

ps-server/src/main/java/com/alipay/antchain/bridge/pluginserver/server/CrossChainServiceImpl.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,21 @@
2828
import com.alipay.antchain.bridge.plugins.spi.bbc.IBBCService;
2929
import com.alipay.antchain.bridge.pluginserver.pluginmanager.IPluginManagerWrapper;
3030
import com.alipay.antchain.bridge.pluginserver.server.exception.ServerErrorCodeEnum;
31+
import com.alipay.antchain.bridge.pluginserver.server.interceptor.RequestTraceInterceptor;
3132
import com.alipay.antchain.bridge.pluginserver.service.*;
3233
import com.google.protobuf.ByteString;
3334
import io.grpc.stub.StreamObserver;
3435
import lombok.extern.slf4j.Slf4j;
3536
import net.devh.boot.grpc.server.service.GrpcService;
3637

37-
@GrpcService
38+
@GrpcService(interceptors = RequestTraceInterceptor.class)
3839
@Slf4j
3940
public class CrossChainServiceImpl extends CrossChainServiceGrpc.CrossChainServiceImplBase {
4041
@Resource
4142
private IPluginManagerWrapper pluginManagerWrapper;
4243

4344
@Override
4445
public void heartbeat(Empty request, StreamObserver<Response> responseObserver) {
45-
log.info("heartbeat from relayer");
4646
responseObserver.onNext(
4747
ResponseBuilder.buildHeartbeatSuccessResp(
4848
HeartbeatResponse.newBuilder()
@@ -79,12 +79,6 @@ public void ifDomainAlive(IfDomainAliveRequest request, StreamObserver<Response>
7979
public void bbcCall(CallBBCRequest request, StreamObserver<Response> responseObserver) {
8080
String product = request.getProduct();
8181
String domain = request.getDomain();
82-
if (CallBBCRequest.RequestCase.QUERYLATESTHEIGHTREQ == request.getRequestCase()) {
83-
log.debug("BBCCall [product: {}, domain: {}, request: {}]", product, domain, request.getRequestCase());
84-
} else {
85-
log.info("BBCCall [product: {}, domain: {}, request: {}]", product, domain, request.getRequestCase());
86-
}
87-
8882
Response resp;
8983

9084
// 1. Startup request needs to be handled separately, because it may need create a service first.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.alipay.antchain.bridge.pluginserver.server.interceptor;
2+
3+
import java.net.InetSocketAddress;
4+
5+
import cn.hutool.core.util.ObjectUtil;
6+
import cn.hutool.core.util.StrUtil;
7+
import io.grpc.*;
8+
import lombok.extern.slf4j.Slf4j;
9+
10+
@Slf4j(topic = "req-trace")
11+
public class RequestTraceInterceptor implements ServerInterceptor {
12+
13+
@Override
14+
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) {
15+
InetSocketAddress clientAddr = (InetSocketAddress) call.getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR);
16+
if (StrUtil.equalsIgnoreCase(call.getMethodDescriptor().getBareMethodName(), "heartbeat")) {
17+
if (ObjectUtil.isNull(clientAddr)) {
18+
log.info("heartbeat from relayer without address found");
19+
} else {
20+
log.info("heartbeat from relayer {}:{}", clientAddr.getHostString(), clientAddr.getPort());
21+
}
22+
} else if (StrUtil.equalsIgnoreCase(call.getMethodDescriptor().getBareMethodName(), "bbcCall")) {
23+
if (ObjectUtil.isNull(clientAddr)) {
24+
log.debug("bbc call from relayer without address found");
25+
} else {
26+
log.debug("bbc call from relayer {}:{}", clientAddr.getHostString(), clientAddr.getPort());
27+
}
28+
}
29+
30+
return next.startCall(call, headers);
31+
}
32+
}

0 commit comments

Comments
 (0)