24
24
import io .grpc .Channel ;
25
25
import io .grpc .ClientCall ;
26
26
import io .grpc .ClientInterceptor ;
27
+ import io .grpc .ForwardingClientCall ;
28
+ import io .grpc .ForwardingClientCallListener ;
29
+ import io .grpc .Metadata ;
27
30
import io .grpc .MethodDescriptor ;
31
+ import io .grpc .Status ;
32
+ import net .devh .boot .grpc .client .interceptor .GrpcGlobalClientInterceptor ;
28
33
29
34
/**
35
+ * Example {@link ClientInterceptor} that logs all called methods in INFO log level, also request and response messages,
36
+ * headers, trailers and interaction status in DEBUG log level. In this example it is added to Spring's application
37
+ * context via {@link GlobalClientInterceptorConfiguration}, but is also possible to directly annotate this class with
38
+ * {@link GrpcGlobalClientInterceptor}.
39
+ *
30
40
* @author Michael ([email protected] )
31
41
* @since 2016/12/8
32
42
*/
@@ -35,10 +45,45 @@ public class LogGrpcInterceptor implements ClientInterceptor {
35
45
private static final Logger log = LoggerFactory .getLogger (LogGrpcInterceptor .class );
36
46
37
47
@ Override
38
- public <ReqT , RespT > ClientCall <ReqT , RespT > interceptCall (MethodDescriptor <ReqT , RespT > method ,
39
- CallOptions callOptions , Channel next ) {
40
- log .info (method .getFullMethodName ());
41
- return next .newCall (method , callOptions );
48
+ public <ReqT , RespT > ClientCall <ReqT , RespT > interceptCall (
49
+ MethodDescriptor <ReqT , RespT > method ,
50
+ CallOptions callOptions ,
51
+ Channel next ) {
52
+
53
+ log .info ("Received call to {}" , method .getFullMethodName ());
54
+ return new ForwardingClientCall .SimpleForwardingClientCall <ReqT , RespT >(next .newCall (method , callOptions )) {
55
+
56
+ @ Override
57
+ public void sendMessage (ReqT message ) {
58
+ log .debug ("Request message: {}" , message );
59
+ super .sendMessage (message );
60
+ }
61
+
62
+ @ Override
63
+ public void start (Listener <RespT > responseListener , Metadata headers ) {
64
+ super .start (
65
+ new ForwardingClientCallListener .SimpleForwardingClientCallListener <RespT >(responseListener ) {
66
+ @ Override
67
+ public void onMessage (RespT message ) {
68
+ log .debug ("Response message: {}" , message );
69
+ super .onMessage (message );
70
+ }
71
+
72
+ @ Override
73
+ public void onHeaders (Metadata headers ) {
74
+ log .debug ("gRPC headers: {}" , headers );
75
+ super .onHeaders (headers );
76
+ }
77
+
78
+ @ Override
79
+ public void onClose (Status status , Metadata trailers ) {
80
+ log .info ("Interaction ends with status: {}" , status );
81
+ log .info ("Trailers: {}" , trailers );
82
+ super .onClose (status , trailers );
83
+ }
84
+ }, headers );
85
+ }
86
+ };
42
87
}
43
88
44
89
}
0 commit comments