114 lines
2.5 KiB
Go
114 lines
2.5 KiB
Go
package log
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"time"
|
|
|
|
"91porn-server/middleware/requestid"
|
|
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
var (
|
|
defaultZap, _ = zap.NewProductionConfig().Build()
|
|
|
|
zapLogger *zap.Logger
|
|
ZapLog *zap.Logger
|
|
Debug = defaultZap.Debug
|
|
Info = defaultZap.Info
|
|
Warn = defaultZap.Warn
|
|
Error = defaultZap.Error
|
|
Fatal = defaultZap.Fatal
|
|
)
|
|
|
|
// Options
|
|
type Options struct {
|
|
Level string // debug, warn, info, error fatal //default info
|
|
DisableStack bool `json:"disableStack"`
|
|
}
|
|
|
|
func Init(opts Options) {
|
|
cfg := zap.NewProductionConfig()
|
|
cfg.EncoderConfig.EncodeTime = timeEncoder
|
|
cfg.EncoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
|
cfg.Level = zap.NewAtomicLevelAt(zapLevel(opts.Level))
|
|
cfg.DisableStacktrace = opts.DisableStack
|
|
//cfg.EncoderConfig.EncodeCaller = zapcore.FullCallerEncoder
|
|
zapLogger, _ = cfg.Build()
|
|
ZapLog = zapLogger
|
|
Debug = zapLogger.Debug
|
|
Info = zapLogger.Info
|
|
Warn = zapLogger.Warn
|
|
Error = zapLogger.Error
|
|
Fatal = zapLogger.Fatal
|
|
}
|
|
|
|
func DebugX(ctx context.Context, msg string, fs ...Field) {
|
|
Debug(msg, appendContext(ctx, fs...)...)
|
|
}
|
|
|
|
func InfoX(ctx context.Context, msg string, fs ...Field) {
|
|
Info(msg, appendContext(ctx, fs...)...)
|
|
}
|
|
|
|
func WarnX(ctx context.Context, msg string, fs ...Field) {
|
|
Warn(msg, appendContext(ctx, fs...)...)
|
|
}
|
|
|
|
func ErrorX(ctx context.Context, msg string, fs ...Field) {
|
|
Error(msg, appendContext(ctx, fs...)...)
|
|
}
|
|
|
|
func FatalX(ctx context.Context, msg string, fs ...Field) {
|
|
Fatal(msg, appendContext(ctx, fs...)...)
|
|
}
|
|
|
|
func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
|
enc.AppendString(t.Format("2006-01-02 15:04:05"))
|
|
}
|
|
|
|
func zapLevel(level string) zapcore.Level {
|
|
level = strings.ToLower(level)
|
|
l := zapcore.InfoLevel
|
|
switch level {
|
|
case "debug":
|
|
l = zapcore.DebugLevel
|
|
case "info":
|
|
l = zapcore.InfoLevel
|
|
case "warn":
|
|
l = zapcore.WarnLevel
|
|
case "error":
|
|
l = zapcore.ErrorLevel
|
|
case "fatal":
|
|
l = zapcore.FatalLevel
|
|
default:
|
|
}
|
|
return l
|
|
}
|
|
|
|
type Field = zap.Field
|
|
|
|
// Any
|
|
func Any(key string, value interface{}) Field {
|
|
return zap.Any(key, value)
|
|
}
|
|
|
|
// E shortcut for Any("err", err)
|
|
func E(err error) Field {
|
|
return Any("err", err)
|
|
}
|
|
|
|
// R is a conveinient way to log request id.
|
|
func R(ctx context.Context) Field {
|
|
rid := ctx.Value(requestid.ContextKey)
|
|
return Any("request-id", rid)
|
|
}
|
|
|
|
func appendContext(ctx context.Context, fs ...Field) (fields []Field) {
|
|
fields = append(fields, R(ctx))
|
|
fields = append(fields, fs...)
|
|
return
|
|
}
|