@@ -20,22 +20,24 @@ import (
20
20
21
21
type (
22
22
options struct {
23
- l * logrus.Logger
24
- level * logrus.Level
25
- formatter logrus.Formatter
26
- format string
27
- reportCaller bool
28
- exitFunc func (int )
29
- leakSensitive bool
30
- redactionText string
31
- hooks []logrus.Hook
32
- c configurator
23
+ l * logrus.Logger
24
+ level * logrus.Level
25
+ formatter logrus.Formatter
26
+ format string
27
+ reportCaller bool
28
+ exitFunc func (int )
29
+ leakSensitive bool
30
+ redactionText string
31
+ redactableHTTPHeaders []string
32
+ hooks []logrus.Hook
33
+ c configurator
33
34
}
34
35
Option func (* options )
35
36
nullConfigurator struct {}
36
37
configurator interface {
37
38
Bool (key string ) bool
38
39
String (key string ) string
40
+ Strings (key string ) []string
39
41
}
40
42
)
41
43
@@ -178,6 +180,12 @@ func RedactionText(text string) Option {
178
180
}
179
181
}
180
182
183
+ func RedactableHTTPHeaders (headers []string ) Option {
184
+ return func (o * options ) {
185
+ o .redactableHTTPHeaders = headers
186
+ }
187
+ }
188
+
181
189
func (c * nullConfigurator ) Bool (_ string ) bool {
182
190
return false
183
191
}
@@ -186,6 +194,10 @@ func (c *nullConfigurator) String(_ string) string {
186
194
return ""
187
195
}
188
196
197
+ func (c * nullConfigurator ) Strings (_ string ) []string {
198
+ return []string {}
199
+ }
200
+
189
201
func newOptions (opts []Option ) * options {
190
202
o := new (options )
191
203
o .c = new (nullConfigurator )
@@ -199,11 +211,12 @@ func newOptions(opts []Option) *options {
199
211
func New (name string , version string , opts ... Option ) * Logger {
200
212
o := newOptions (opts )
201
213
return & Logger {
202
- opts : opts ,
203
- name : name ,
204
- version : version ,
205
- leakSensitive : o .leakSensitive || o .c .Bool ("log.leak_sensitive_values" ),
206
- redactionText : stringsx .DefaultIfEmpty (o .redactionText , `Value is sensitive and has been redacted. To see the value set config key "log.leak_sensitive_values = true" or environment variable "LOG_LEAK_SENSITIVE_VALUES=true".` ),
214
+ opts : opts ,
215
+ name : name ,
216
+ version : version ,
217
+ leakSensitive : o .leakSensitive || o .c .Bool ("log.leak_sensitive_values" ),
218
+ redactionText : stringsx .DefaultIfEmpty (o .redactionText , `Value is sensitive and has been redacted. To see the value set config key "log.leak_sensitive_values = true" or environment variable "LOG_LEAK_SENSITIVE_VALUES=true".` ),
219
+ redactableHTTPHeaders : o .redactableHTTPHeaders ,
207
220
Entry : newLogger (o .l , o ).WithFields (logrus.Fields {
208
221
"audience" : "application" , "service_name" : name , "service_version" : version }),
209
222
}
@@ -216,6 +229,11 @@ func NewAudit(name string, version string, opts ...Option) *Logger {
216
229
func (l * Logger ) UseConfig (c configurator ) {
217
230
l .leakSensitive = l .leakSensitive || c .Bool ("log.leak_sensitive_values" )
218
231
l .redactionText = stringsx .DefaultIfEmpty (c .String ("log.redaction_text" ), l .redactionText )
232
+ r := c .Strings ("log.redactable_http_headers" )
233
+ if len (r ) == 0 {
234
+ r = l .redactableHTTPHeaders
235
+ }
236
+ l .redactableHTTPHeaders = r
219
237
o := newOptions (append (l .opts , WithConfigurator (c )))
220
238
setLevel (l .Entry .Logger , o )
221
239
setFormatter (l .Entry .Logger , o )
0 commit comments