func (l *zapLogger) WithFields(keyValues Fields) Logger {
	var f = make([]interface{}, 0)
	for k, v := range keyValues {
		f = append(f, k)
		f = append(f, v)
	}
	n := l.With(f...)
	return &zapLogger{n}
}
FIXME: Need to set zap.AddCallerSkip(0) to show correct line numbers for non
default loggers
package log
import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"github.com/uber/storagetapper/config"
)
func init() {
	registerPlugin("zap", configureZap)
}
type zapConfig struct {
	Logging zap.Config
}
type zapLogger struct {
	*zap.SugaredLogger
}
func configureZap(level int, production bool) (Logger, error) {
	var cfg zapConfig
	cfg.Logging = zap.NewProductionConfig()
	if !production {
		cfg.Logging = zap.NewDevelopmentConfig()
	}
	cfg.Logging.Level = zap.NewAtomicLevelAt(zapcore.Level(Debug - level - 1))
	if err := config.LoadSection(&cfg); err != nil {
		return nil, err
	}
	l, err := cfg.Logging.Build(zap.AddCallerSkip(2))
	if err != nil {
		return nil, err
	}
	return &zapLogger{l.Sugar()}, nil
}