package log import ( "context" "fmt" "log" "os" "time" "videoweb/pub/common/log/zapcorex" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) var ( zapLogger *zap.Logger zapLoggerS *zap.SugaredLogger ZapLog *zap.Logger ZapLogS *zap.SugaredLogger Debug = zapLogger.Debug Info = zapLogger.Info Warn = zapLogger.Warn Error = zapLogger.Error Panic = zapLogger.Panic Fatal = zapLogger.Fatal Debugf = zapLoggerS.Debugf Infof = zapLoggerS.Infof Warnf = zapLoggerS.Warnf Errorf = zapLoggerS.Errorf Fatalf = zapLoggerS.Fatalf Debugw = zapLoggerS.Debugw Infow = zapLoggerS.Infow Warnw = zapLoggerS.Warnw Errorw = zapLoggerS.Errorw Fatalw = zapLoggerS.Fatalw ) func newEncoderConfig() zapcore.EncoderConfig { return zapcore.EncoderConfig{ // Keys can be anything except the empty string. TimeKey: "T", LevelKey: "L", NameKey: "N", CallerKey: "C", MessageKey: "M", StacktraceKey: "S", FunctionKey: "F", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.CapitalColorLevelEncoder, EncodeTime: timeEncoder, EncodeDuration: zapcore.StringDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, ConsoleSeparator: " ", } } func init() { core := zapcore.NewCore( zapcorex.NewConsoleEncoder(newEncoderConfig()), zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), zap.DebugLevel, ) zapLogger = zap.New(core, zap.AddCaller()) zapLoggerS = zapLogger.Sugar() ZapLog = zapLogger ZapLogS = zapLoggerS Debug = zapLogger.Debug Info = zapLogger.Info Warn = zapLogger.Warn Error = zapLogger.Error Panic = zapLogger.Panic Fatal = zapLogger.Fatal Debugf = zapLoggerS.Debugf Infof = zapLoggerS.Infof Warnf = zapLoggerS.Warnf Errorf = zapLoggerS.Errorf Fatalf = zapLoggerS.Fatalf Debugw = zapLoggerS.Debugw Infow = zapLoggerS.Infow Warnw = zapLoggerS.Warnw Errorw = zapLoggerS.Errorw Fatalw = zapLoggerS.Fatalw } func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.In(time.Local).Format("2006-01-02 15:04:05")) } type Field = zap.Field func Any(key string, value interface{}) Field { return zap.Any(key, value) } func E(err error) Field { return Any("err", err) } type contextKey int64 var ( loggerContextKey contextKey ) func ContextWithLogger(ctx context.Context, l *zap.SugaredLogger) context.Context { return context.WithValue(ctx, loggerContextKey, l) } func LoggerFromContext(ctx context.Context) *zap.SugaredLogger { v := ctx.Value(loggerContextKey) if v == nil { return ZapLogS } return v.(*zap.SugaredLogger) } type Logger struct{} // Info logs routine messages about cron's operation. func (s *Logger) Info(msg string, keysAndValues ...interface{}) { _ = log.Default().Output(2, msg+" "+fmt.Sprint(keysAndValues...)) } // Error logs an error condition. func (s *Logger) Error(err error, msg string, keysAndValues ...interface{}) { line := fmt.Sprintf("%s %v %s", msg, err, fmt.Sprint(keysAndValues...)) _ = log.Default().Output(2, line) }