diff options
author | Peter Fox <[email protected]> | 2021-08-21 22:33:13 +0100 |
---|---|---|
committer | Peter Fox <[email protected]> | 2021-09-06 22:24:22 +0100 |
commit | 95f36a157cdf25f7dc40bd5fa963251231c211ef (patch) | |
tree | 20d61af5efb9e823c27b09817f9c3c0e59636971 /plugins | |
parent | 6749db4a2d39fa70b426bcf50edf66a176c07f57 (diff) |
Lets Zap fields to be used as arguments to logger
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/logger/zap_adapter.go | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/plugins/logger/zap_adapter.go b/plugins/logger/zap_adapter.go index fab59844..0649bb4d 100644 --- a/plugins/logger/zap_adapter.go +++ b/plugins/logger/zap_adapter.go @@ -4,6 +4,7 @@ import ( "fmt" "go.uber.org/zap" + core "go.uber.org/zap/zapcore" ) type ZapAdapter struct { @@ -17,13 +18,30 @@ func NewZapAdapter(zapLogger *zap.Logger) *ZapAdapter { } } +func separateFields(keyVals []interface{}) (fields []zap.Field, individualKeyVals []interface{}) { + for _, value := range keyVals { + switch value := value.(type) { + case zap.Field: + fields = append(fields, value) + case core.ObjectMarshaler: + fields = append(fields, zap.Inline(value)) + default: + individualKeyVals = append(individualKeyVals, value) + } + } + return +} + func (log *ZapAdapter) fields(keyvals []interface{}) []zap.Field { + // separate any zap fields from other structs + zapFields, keyvals := separateFields(keyvals) + // we should have even number of keys and values if len(keyvals)%2 != 0 { return []zap.Field{zap.Error(fmt.Errorf("odd number of keyvals pairs: %v", keyvals))} } - fields := make([]zap.Field, 0, len(keyvals)/2) + fields := make([]zap.Field, 0, len(keyvals)/2+len(zapFields)) for i := 0; i < len(keyvals); i += 2 { key, ok := keyvals[i].(string) if !ok { @@ -31,6 +49,8 @@ func (log *ZapAdapter) fields(keyvals []interface{}) []zap.Field { } fields = append(fields, zap.Any(key, keyvals[i+1])) } + // add all the fields + fields = append(fields, zapFields...) return fields } |