Files
2026-10-26 16:28:14 +08:00

129 lines
3.1 KiB
Go

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)
}