diff options
-rw-r--r-- | caddytest/integration/caddyfile_adapt/log_filters.txt | 7 | ||||
-rw-r--r-- | modules/logging/filters.go | 32 |
2 files changed, 36 insertions, 3 deletions
diff --git a/caddytest/integration/caddyfile_adapt/log_filters.txt b/caddytest/integration/caddyfile_adapt/log_filters.txt index ab11807..0949c1d 100644 --- a/caddytest/integration/caddyfile_adapt/log_filters.txt +++ b/caddytest/integration/caddyfile_adapt/log_filters.txt @@ -5,7 +5,7 @@ log { format filter { wrap console fields { - request>headers>Authorization delete + request>headers>Authorization replace REDACTED request>headers>Server delete request>remote_addr ip_mask { ipv4 24 @@ -30,7 +30,8 @@ log { "encoder": { "fields": { "request\u003eheaders\u003eAuthorization": { - "filter": "delete" + "filter": "replace", + "value": "REDACTED" }, "request\u003eheaders\u003eServer": { "filter": "delete" @@ -66,4 +67,4 @@ log { } } } -}
\ No newline at end of file +} diff --git a/modules/logging/filters.go b/modules/logging/filters.go index a5a917d..a4e3c73 100644 --- a/modules/logging/filters.go +++ b/modules/logging/filters.go @@ -25,6 +25,7 @@ import ( func init() { caddy.RegisterModule(DeleteFilter{}) + caddy.RegisterModule(ReplaceFilter{}) caddy.RegisterModule(IPMaskFilter{}) } @@ -57,6 +58,37 @@ func (DeleteFilter) Filter(in zapcore.Field) zapcore.Field { return in } +// ReplaceFilter is a Caddy log field filter that +// replaces the field with the indicated string. +type ReplaceFilter struct { + Value string `json:"value,omitempty"` +} + +// CaddyModule returns the Caddy module information. +func (ReplaceFilter) CaddyModule() caddy.ModuleInfo { + return caddy.ModuleInfo{ + ID: "caddy.logging.encoders.filter.replace", + New: func() caddy.Module { return new(ReplaceFilter) }, + } +} + +// UnmarshalCaddyfile sets up the module from Caddyfile tokens. +func (f *ReplaceFilter) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { + for d.Next() { + if d.NextArg() { + f.Value = d.Val() + } + } + return nil +} + +// Filter filters the input field with the replacement value. +func (f *ReplaceFilter) Filter(in zapcore.Field) zapcore.Field { + in.Type = zapcore.StringType + in.String = f.Value + return in +} + // IPMaskFilter is a Caddy log field filter that // masks IP addresses. type IPMaskFilter struct { |