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