pkg/utils/gwlog/gwlog.go (117 lines of code) (raw):
package gwlog
import (
"context"
"fmt"
"log"
"os"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type TracedLogger struct {
InnerLogger *zap.SugaredLogger
}
func (t *TracedLogger) Infoln(args ...interface{}) {
t.InnerLogger.Infoln(args...)
}
func (t *TracedLogger) Infow(ctx context.Context, msg string, keysAndValues ...interface{}) {
if tr := GetTraceID(ctx); tr != "" {
keysAndValues = append(keysAndValues, traceID, tr)
}
t.InnerLogger.Infow(msg, keysAndValues...)
}
func (t *TracedLogger) Infof(ctx context.Context, template string, args ...interface{}) {
if tr := GetTraceID(ctx); tr != "" {
t.InnerLogger.Infow(fmt.Sprintf(template, args...), traceID, tr)
return
}
t.InnerLogger.Infof(template, args...)
}
func (t *TracedLogger) Info(ctx context.Context, msg string) {
if tr := GetTraceID(ctx); tr != "" {
t.InnerLogger.Infow(msg, traceID, tr)
return
}
t.InnerLogger.Info(msg)
}
func (t *TracedLogger) Errorw(ctx context.Context, msg string, keysAndValues ...interface{}) {
if tr := GetTraceID(ctx); tr != "" {
keysAndValues = append(keysAndValues, traceID, tr)
}
t.InnerLogger.Errorw(msg, keysAndValues)
}
func (t *TracedLogger) Errorf(ctx context.Context, template string, args ...interface{}) {
if tr := GetTraceID(ctx); tr != "" {
t.InnerLogger.Errorw(fmt.Sprintf(template, args...), traceID, tr)
return
}
t.InnerLogger.Errorf(template, args...)
}
func (t *TracedLogger) Error(ctx context.Context, msg string) {
if tr := GetTraceID(ctx); tr != "" {
t.InnerLogger.Errorw(msg, traceID, tr)
return
}
t.InnerLogger.Error(msg)
}
func (t *TracedLogger) Debugw(ctx context.Context, msg string, keysAndValues ...interface{}) {
if tr := GetTraceID(ctx); tr != "" {
keysAndValues = append(keysAndValues, traceID, tr)
}
t.InnerLogger.Debugw(msg, keysAndValues...)
}
func (t *TracedLogger) Debugf(ctx context.Context, template string, args ...interface{}) {
if tr := GetTraceID(ctx); tr != "" {
t.InnerLogger.Debugw(fmt.Sprintf(template, args...), traceID, tr)
return
}
t.InnerLogger.Debugf(template, args...)
}
func (t *TracedLogger) Debug(ctx context.Context, msg string) {
if tr := GetTraceID(ctx); tr != "" {
t.InnerLogger.Debugw(msg, traceID, tr)
return
}
t.InnerLogger.Debug(msg)
}
func (t *TracedLogger) Warnw(ctx context.Context, msg string, keysAndValues ...interface{}) {
if tr := GetTraceID(ctx); tr != "" {
keysAndValues = append(keysAndValues, traceID, tr)
}
t.InnerLogger.Warnw(msg, keysAndValues...)
}
func (t *TracedLogger) Warnf(ctx context.Context, template string, args ...interface{}) {
if tr := GetTraceID(ctx); tr != "" {
t.InnerLogger.Warnw(fmt.Sprintf(template, args...), traceID, tr)
return
}
t.InnerLogger.Warnf(template, args...)
}
func (t *TracedLogger) Warn(ctx context.Context, msg string) {
if tr := GetTraceID(ctx); tr != "" {
t.InnerLogger.Warnw(msg, traceID, tr)
return
}
t.InnerLogger.Warn(msg)
}
func (t *TracedLogger) Named(name string) *TracedLogger {
return &TracedLogger{InnerLogger: t.InnerLogger.Named(name)}
}
type Logger = *TracedLogger
func NewLogger(level zapcore.Level) Logger {
var zc zap.Config
dev := os.Getenv("DEV_MODE")
if dev != "" {
zc = zap.NewDevelopmentConfig()
} else {
zc = zap.NewProductionConfig()
zc.DisableStacktrace = true
zc.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
}
zc.Level = zap.NewAtomicLevelAt(level)
z, err := zc.Build()
if err != nil {
log.Fatal("cannot initialize zapr logger", err)
}
return &TracedLogger{InnerLogger: z.Sugar().WithOptions(zap.AddCallerSkip(1))}
}
var FallbackLogger = NewLogger(zap.DebugLevel)