@@ -18,8 +18,9 @@ import (
18
18
)
19
19
20
20
type serverPayloadReporter struct {
21
- ctx context.Context
22
- logger Logger
21
+ ctx context.Context
22
+ logger Logger
23
+ decision PayloadDecision
23
24
}
24
25
25
26
func (c * serverPayloadReporter ) PostCall (error , time.Duration ) {}
@@ -28,6 +29,11 @@ func (c *serverPayloadReporter) PostMsgSend(req interface{}, err error, duration
28
29
if err != nil {
29
30
return
30
31
}
32
+ switch c .decision {
33
+ case LogPayloadResponse , LogPayloadRequestAndResponse :
34
+ default :
35
+ return
36
+ }
31
37
32
38
logger := c .logger .With (extractFields (tags .Extract (c .ctx ))... )
33
39
p , ok := req .(proto.Message )
@@ -44,6 +50,11 @@ func (c *serverPayloadReporter) PostMsgReceive(reply interface{}, err error, dur
44
50
if err != nil {
45
51
return
46
52
}
53
+ switch c .decision {
54
+ case LogPayloadRequest , LogPayloadRequestAndResponse :
55
+ default :
56
+ return
57
+ }
47
58
48
59
logger := c .logger .With (extractFields (tags .Extract (c .ctx ))... )
49
60
@@ -57,8 +68,9 @@ func (c *serverPayloadReporter) PostMsgReceive(reply interface{}, err error, dur
57
68
}
58
69
59
70
type clientPayloadReporter struct {
60
- ctx context.Context
61
- logger Logger
71
+ ctx context.Context
72
+ logger Logger
73
+ decision PayloadDecision
62
74
}
63
75
64
76
func (c * clientPayloadReporter ) PostCall (error , time.Duration ) {}
@@ -67,6 +79,11 @@ func (c *clientPayloadReporter) PostMsgSend(req interface{}, err error, duration
67
79
if err != nil {
68
80
return
69
81
}
82
+ switch c .decision {
83
+ case LogPayloadRequest , LogPayloadRequestAndResponse :
84
+ default :
85
+ return
86
+ }
70
87
71
88
logger := c .logger .With (extractFields (tags .Extract (c .ctx ))... )
72
89
p , ok := req .(proto.Message )
@@ -81,6 +98,11 @@ func (c *clientPayloadReporter) PostMsgReceive(reply interface{}, err error, dur
81
98
if err != nil {
82
99
return
83
100
}
101
+ switch c .decision {
102
+ case LogPayloadResponse , LogPayloadRequestAndResponse :
103
+ default :
104
+ return
105
+ }
84
106
85
107
logger := c .logger .With (extractFields (tags .Extract (c .ctx ))... )
86
108
p , ok := reply .(proto.Message )
@@ -98,8 +120,10 @@ type payloadReportable struct {
98
120
timestampFormat string
99
121
}
100
122
101
- func (r * payloadReportable ) ServerReporter (ctx context.Context , req interface {}, typ interceptors.GRPCType , service string , method string ) (interceptors.Reporter , context.Context ) {
102
- if ! r .serverDecider (ctx , interceptors .FullMethod (service , method ), req ) {
123
+ func (r * payloadReportable ) ServerReporter (ctx context.Context , req interface {}, typ interceptors.GRPCType ,
124
+ service string , method string ) (interceptors.Reporter , context.Context ) {
125
+ decision := r .serverDecider (ctx , interceptors .FullMethod (service , method ), req )
126
+ if decision == NoPayloadLogging {
103
127
return interceptors.NoopReporter {}, ctx
104
128
}
105
129
fields := commonFields (KindServerFieldValue , typ , service , method )
@@ -108,12 +132,15 @@ func (r *payloadReportable) ServerReporter(ctx context.Context, req interface{},
108
132
fields = append (fields , "grpc.request.deadline" , d .Format (r .timestampFormat ))
109
133
}
110
134
return & serverPayloadReporter {
111
- ctx : ctx ,
112
- logger : r .logger .With (fields ... ),
135
+ ctx : ctx ,
136
+ logger : r .logger .With (fields ... ),
137
+ decision : decision ,
113
138
}, ctx
114
139
}
115
- func (r * payloadReportable ) ClientReporter (ctx context.Context , _ interface {}, typ interceptors.GRPCType , service string , method string ) (interceptors.Reporter , context.Context ) {
116
- if ! r .clientDecider (ctx , interceptors .FullMethod (service , method )) {
140
+ func (r * payloadReportable ) ClientReporter (ctx context.Context , _ interface {}, typ interceptors.GRPCType ,
141
+ service string , method string ) (interceptors.Reporter , context.Context ) {
142
+ decision := r .clientDecider (ctx , interceptors .FullMethod (service , method ))
143
+ if decision == NoPayloadLogging {
117
144
return interceptors.NoopReporter {}, ctx
118
145
}
119
146
fields := commonFields (KindClientFieldValue , typ , service , method )
@@ -122,33 +149,50 @@ func (r *payloadReportable) ClientReporter(ctx context.Context, _ interface{}, t
122
149
fields = append (fields , "grpc.request.deadline" , d .Format (r .timestampFormat ))
123
150
}
124
151
return & clientPayloadReporter {
125
- ctx : ctx ,
126
- logger : r .logger .With (fields ... ),
152
+ ctx : ctx ,
153
+ logger : r .logger .With (fields ... ),
154
+ decision : decision ,
127
155
}, ctx
128
156
}
129
157
130
158
// PayloadUnaryServerInterceptor returns a new unary server interceptors that logs the payloads of requests on INFO level.
131
159
// Logger tags will be used from tags context.
132
- func PayloadUnaryServerInterceptor (logger Logger , decider ServerPayloadLoggingDecider , timestampFormat string ) grpc.UnaryServerInterceptor {
133
- return interceptors .UnaryServerInterceptor (& payloadReportable {logger : logger , serverDecider : decider , timestampFormat : timestampFormat })
160
+ func PayloadUnaryServerInterceptor (logger Logger , decider ServerPayloadLoggingDecider ,
161
+ timestampFormat string ) grpc.UnaryServerInterceptor {
162
+ return interceptors .UnaryServerInterceptor (& payloadReportable {
163
+ logger : logger ,
164
+ serverDecider : decider ,
165
+ timestampFormat : timestampFormat })
134
166
}
135
167
136
168
// PayloadStreamServerInterceptor returns a new server server interceptors that logs the payloads of requests on INFO level.
137
169
// Logger tags will be used from tags context.
138
- func PayloadStreamServerInterceptor (logger Logger , decider ServerPayloadLoggingDecider , timestampFormat string ) grpc.StreamServerInterceptor {
139
- return interceptors .StreamServerInterceptor (& payloadReportable {logger : logger , serverDecider : decider , timestampFormat : timestampFormat })
170
+ func PayloadStreamServerInterceptor (logger Logger , decider ServerPayloadLoggingDecider ,
171
+ timestampFormat string ) grpc.StreamServerInterceptor {
172
+ return interceptors .StreamServerInterceptor (& payloadReportable {
173
+ logger : logger ,
174
+ serverDecider : decider ,
175
+ timestampFormat : timestampFormat })
140
176
}
141
177
142
178
// PayloadUnaryClientInterceptor returns a new unary client interceptor that logs the payloads of requests and responses on INFO level.
143
179
// Logger tags will be used from tags context.
144
- func PayloadUnaryClientInterceptor (logger Logger , decider ClientPayloadLoggingDecider , timestampFormat string ) grpc.UnaryClientInterceptor {
145
- return interceptors .UnaryClientInterceptor (& payloadReportable {logger : logger , clientDecider : decider , timestampFormat : timestampFormat })
180
+ func PayloadUnaryClientInterceptor (logger Logger , decider ClientPayloadLoggingDecider ,
181
+ timestampFormat string ) grpc.UnaryClientInterceptor {
182
+ return interceptors .UnaryClientInterceptor (& payloadReportable {
183
+ logger : logger ,
184
+ clientDecider : decider ,
185
+ timestampFormat : timestampFormat })
146
186
}
147
187
148
188
// PayloadStreamClientInterceptor returns a new streaming client interceptor that logs the paylods of requests and responses on INFO level.
149
189
// Logger tags will be used from tags context.
150
- func PayloadStreamClientInterceptor (logger Logger , decider ClientPayloadLoggingDecider , timestampFormat string ) grpc.StreamClientInterceptor {
151
- return interceptors .StreamClientInterceptor (& payloadReportable {logger : logger , clientDecider : decider , timestampFormat : timestampFormat })
190
+ func PayloadStreamClientInterceptor (logger Logger , decider ClientPayloadLoggingDecider ,
191
+ timestampFormat string ) grpc.StreamClientInterceptor {
192
+ return interceptors .StreamClientInterceptor (& payloadReportable {
193
+ logger : logger ,
194
+ clientDecider : decider ,
195
+ timestampFormat : timestampFormat })
152
196
}
153
197
154
198
func logProtoMessageAsJson (logger Logger , pbMsg proto.Message , key string , msg string ) {
0 commit comments