Files
huangguo_server/common/log/log.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

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
}