diff options
author | Valery Piashchynski <[email protected]> | 2020-11-05 17:58:23 +0300 |
---|---|---|
committer | GitHub <[email protected]> | 2020-11-05 17:58:23 +0300 |
commit | 9fbe7726dd55cfedda724b7644e1b6bf7c1a6cb4 (patch) | |
tree | f2bf9b97d38103de51e2d140aa76666f9c6341c8 /log/zap_adapter.go | |
parent | edc45b3e24afdb5e56e74ffbbbd50e0e3b04922b (diff) | |
parent | 73da7300fcc9b8b22faa1c91fc1faff22ab944ff (diff) |
Merge pull request #388 from spiral/enhancement/testsv2.0.0-alpha15
Tests for the new plugins
Diffstat (limited to 'log/zap_adapter.go')
-rw-r--r-- | log/zap_adapter.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/log/zap_adapter.go b/log/zap_adapter.go new file mode 100644 index 00000000..65f8d04b --- /dev/null +++ b/log/zap_adapter.go @@ -0,0 +1,56 @@ +package log + +import ( + "fmt" + + "go.uber.org/zap" +) + +type ZapAdapter struct { + zl *zap.Logger +} + +// Create NewZapAdapter which uses general log interface +func NewZapAdapter(zapLogger *zap.Logger) *ZapAdapter { + return &ZapAdapter{ + zl: zapLogger.WithOptions(zap.AddCallerSkip(1)), + } +} + +func (log *ZapAdapter) fields(keyvals []interface{}) []zap.Field { + // 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))} + } + + var fields []zap.Field + for i := 0; i < len(keyvals); i += 2 { + key, ok := keyvals[i].(string) + if !ok { + key = fmt.Sprintf("%v", keyvals[i]) + } + fields = append(fields, zap.Any(key, keyvals[i+1])) + } + + return fields +} + +func (log *ZapAdapter) Debug(msg string, keyvals ...interface{}) { + log.zl.Debug(msg, log.fields(keyvals)...) +} + +func (log *ZapAdapter) Info(msg string, keyvals ...interface{}) { + log.zl.Info(msg, log.fields(keyvals)...) +} + +func (log *ZapAdapter) Warn(msg string, keyvals ...interface{}) { + log.zl.Warn(msg, log.fields(keyvals)...) +} + +func (log *ZapAdapter) Error(msg string, keyvals ...interface{}) { + log.zl.Error(msg, log.fields(keyvals)...) +} + +func (log *ZapAdapter) With(keyvals ...interface{}) Logger { + return NewZapAdapter(log.zl.With(log.fields(keyvals)...)) +} |