1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package simple_zap
- import (
- "context"
- "go.uber.org/zap"
- "go.uber.org/zap/zapcore"
- "gopkg.in/natefinch/lumberjack.v2"
- )
- const loggerCtxKey = "baozhida"
- var Logger *zap.Logger
- func init() {
- hook := lumberjack.Logger{
- Filename: "./log/app.log",
- MaxSize: 1,
- Compress: true,
- MaxAge: 30,
- MaxBackups: 7,
- LocalTime: true,
- }
- encoder_config := zapcore.EncoderConfig{
- MessageKey: "message",
- LevelKey: "level",
- TimeKey: "time",
- CallerKey: "lineNum",
- FunctionKey: "func",
- LineEnding: zapcore.DefaultLineEnding, // 回车符换行
- EncodeLevel: zapcore.LowercaseLevelEncoder, // level小写: info,debug,warn等 而不是 Info, Debug,Warn等
- EncodeTime: zapcore.ISO8601TimeEncoder, // 时间格式: "2006-01-02T15:04:05.000Z0700"
- EncodeDuration: zapcore.SecondsDurationEncoder, // 时间戳用float64型,更加准确, 另一种是NanosDurationEncoder int64
- EncodeCaller: zapcore.ShortCallerEncoder, // 产生日志文件的路径格式: 包名/文件名:行号
- }
- caller := zap.AddCaller() //日志打印输出 文件名, 行号, 函数名
- development := zap.Development() // 可输出 dpanic, panic 级别的日志
- field := zap.Fields() // 负责给日志生成一个个 k-v 对
- var syncers []zapcore.WriteSyncer // io writer
- syncers = append(syncers, zapcore.AddSync(&hook))
- atomic_level := zap.NewAtomicLevel() // 设置日志 level
- atomic_level.SetLevel(zap.DebugLevel) // 打印 debug, info, warn,eror, depanic,panic,fetal 全部级别日志
- core := zapcore.NewCore(zapcore.NewJSONEncoder(encoder_config), zapcore.NewMultiWriteSyncer(syncers...), atomic_level)
- Logger = zap.New(core, caller, development, field)
- }
- // NewCtx 给 ctx 注入一个 looger, logger 中包含Field(内含日志打印的 k-v对)
- func NewCtx(ctx context.Context, fields ...zapcore.Field) context.Context {
- return context.WithValue(ctx, loggerCtxKey, WithCtx(ctx).With(fields...))
- }
- // WithCtx 尝试从 context 中获取带有 traceId Field的 logge
- func WithCtx(ctx context.Context) *zap.Logger {
- if ctx == nil {
- return Logger
- }
- ctx_logger, ok := ctx.Value(loggerCtxKey).(*zap.Logger)
- if ok {
- return ctx_logger
- }
- return Logger
- }
|