summaryrefslogtreecommitdiff
path: root/interfaces/log/zap_adapter.go
diff options
context:
space:
mode:
authorValery Piashchynski <[email protected]>2020-11-16 15:46:08 +0300
committerGitHub <[email protected]>2020-11-16 15:46:08 +0300
commit6236aac37bd1661b20400689f66d1e92283c5111 (patch)
treeeb8a9a4e4717fb4cd6c971b5ce67c53b5f6a0f8c /interfaces/log/zap_adapter.go
parent0874bcb2f6b284a940ba4f3507eb8c4619c27868 (diff)
parent38f6925db27dd94cfbca873901bf932ed1456906 (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.go56
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)...))
+}