[ zap日志[go] ]


基本使用

package main

import (
    "os"

    "github.com/natefinch/lumberjack"
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
)

type Logger struct {
    *zap.Logger
}

func ZapLoginit() *Logger {
    coreList := make([]zapcore.Core, 0)
    // 输出终端
    encoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
    coreList = append(coreList, zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.DebugLevel))
    // 输出文件(info)
    infoJackLogger := &lumberjack.Logger{
        Filename:   "./info.log",
        MaxSize:    50,
        MaxBackups: 30,
        MaxAge:     30,
        LocalTime:  true,
        Compress:   false,
    }
    coreList = append(coreList, zapcore.NewCore(encoder, zapcore.AddSync(infoJackLogger), zapcore.InfoLevel))

    // 输出文件(error)
    errJackLogger := &lumberjack.Logger{
        Filename:   "./error.log",
        MaxSize:    50,
        MaxBackups: 50,
        MaxAge:     30,
        LocalTime:  true,
        Compress:   false,
    }
    coreList = append(coreList, zapcore.NewCore(encoder, zapcore.AddSync(errJackLogger), zapcore.ErrorLevel))

    // 所有的output, 汇聚初始化
    core := zapcore.NewTee(coreList...)

    // 设置是否打印堆栈
    zapLogger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1), zap.AddStacktrace(zapcore.ErrorLevel))

    return &Logger{
        zapLogger,
    }
}