diff options
author | Valery Piashchynski <[email protected]> | 2020-11-16 15:46:08 +0300 |
---|---|---|
committer | GitHub <[email protected]> | 2020-11-16 15:46:08 +0300 |
commit | 6236aac37bd1661b20400689f66d1e92283c5111 (patch) | |
tree | eb8a9a4e4717fb4cd6c971b5ce67c53b5f6a0f8c /interfaces/log/zap_adapter.go | |
parent | 0874bcb2f6b284a940ba4f3507eb8c4619c27868 (diff) | |
parent | 38f6925db27dd94cfbca873901bf932ed1456906 (diff) |
Merge pull request #392 from spiral/plugin/metricsv2.0.0-alpha18
[RR2] Metrics plugin 2.0
Diffstat (limited to 'interfaces/log/zap_adapter.go')
-rw-r--r-- | interfaces/log/zap_adapter.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/interfaces/log/zap_adapter.go b/interfaces/log/zap_adapter.go new file mode 100644 index 00000000..65f8d04b --- /dev/null +++ b/interfaces/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)...)) +} |