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 { | 
