From 8cb78d376a988419806e4c8cdb5be70b4bb5c08c Mon Sep 17 00:00:00 2001 From: Kelsey Francis Date: Tue, 29 Aug 2017 12:00:40 -0700 Subject: [PATCH] Add zap log adapter --- .travis.yml | 1 + log/zapadapter/adapter.go | 40 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 log/zapadapter/adapter.go diff --git a/.travis.yml b/.travis.yml index 88f8fb22..2dd120d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -57,6 +57,7 @@ install: - go get -u github.com/satori/go.uuid - go get -u github.com/sirupsen/logrus - go get -u github.com/pkg/errors + - go get -u go.uber.org/zap script: - go test -v -race ./... diff --git a/log/zapadapter/adapter.go b/log/zapadapter/adapter.go new file mode 100644 index 00000000..82263b6e --- /dev/null +++ b/log/zapadapter/adapter.go @@ -0,0 +1,40 @@ +// Package zapadapter provides a logger that writes to a go.uber.org/zap.Logger. +package zapadapter + +import ( + "github.com/jackc/pgx" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +type Logger struct { + logger *zap.Logger +} + +func NewLogger(logger *zap.Logger) *Logger { + return &Logger{logger: logger.WithOptions(zap.AddCallerSkip(1))} +} + +func (pl *Logger) Log(level pgx.LogLevel, msg string, data map[string]interface{}) { + fields := make([]zapcore.Field, len(data)) + i := 0 + for k, v := range data { + fields[i] = zap.Reflect(k, v) + i++ + } + + switch level { + case pgx.LogLevelTrace: + pl.logger.Debug(msg, append(fields, zap.Stringer("PGX_LOG_LEVEL", level))...) + case pgx.LogLevelDebug: + pl.logger.Debug(msg, fields...) + case pgx.LogLevelInfo: + pl.logger.Info(msg, fields...) + case pgx.LogLevelWarn: + pl.logger.Warn(msg, fields...) + case pgx.LogLevelError: + pl.logger.Error(msg, fields...) + default: + pl.logger.Error(msg, append(fields, zap.Stringer("PGX_LOG_LEVEL", level))...) + } +}