go日志框架zap配置示例

如果你正在对golang的日志框架做选型,我推荐zap

package log

import (
    "testing"
    "time"

    "os"

    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "gopkg.in/natefinch/lumberjack.v2"
)

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",
        LineEnding:     zapcore.DefaultLineEnding,
        EncodeLevel:    zapcore.CapitalLevelEncoder,
        EncodeTime:     TimeEncoder,
        EncodeDuration: zapcore.StringDurationEncoder,
        EncodeCaller:   zapcore.ShortCallerEncoder,
    }
}

func TimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
    enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
}

func TestLogrotate(t *testing.T) {
    w := zapcore.AddSync(&lumberjack.Logger{
        Filename:   "foo.log",
        MaxSize:    500, // megabytes
        MaxBackups: 3,
        MaxAge:     28, // days
    })
    core := zapcore.NewCore(
        zapcore.NewConsoleEncoder(NewEncoderConfig()),
        zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout),
            w),
        zap.DebugLevel,
    )
    logger := zap.New(core, zap.AddCaller())
    logger.Info("info")
}

打印结果:

2018-11-15 18:23:07.985 INFO    log/zap_test.go:54  info

你可能感兴趣的:(go日志框架zap配置示例)