summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorPeter Fox <[email protected]>2021-08-21 22:33:13 +0100
committerPeter Fox <[email protected]>2021-09-06 22:24:22 +0100
commit95f36a157cdf25f7dc40bd5fa963251231c211ef (patch)
tree20d61af5efb9e823c27b09817f9c3c0e59636971 /plugins
parent6749db4a2d39fa70b426bcf50edf66a176c07f57 (diff)
Lets Zap fields to be used as arguments to logger
Diffstat (limited to 'plugins')
-rw-r--r--plugins/logger/zap_adapter.go22
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
}