gin & zap & logstash

自定义zap logger,使用了https://github.com/elastic/ecs-logging-go-zap

package log

import (
    "os"
    "time"

    "github.com/natefinch/lumberjack"
    "github.com/spf13/viper"
    "go.elastic.co/ecszap"
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "easymesh.net/search-service/util"
)

type Field = zap.Field

var (
    Logger  *zap.Logger
    String  = zap.String
    Any     = zap.Any
    Int     = zap.Int
    Float32 = zap.Float32
)

func InitLogger(viper *viper.Viper) {
    hook := lumberjack.Logger{
        Filename:   viper.GetString("logging.file"),
        MaxSize:    10,
        MaxBackups: 30,
        MaxAge:     7,
        Compress:   true,
    }
    write := zapcore.AddSync(&hook)

    var level zapcore.Level

    switch viper.GetString("logging.level") {
    case "debug":
        level = zap.DebugLevel
    case "info":
        level = zap.InfoLevel
    case "error":
        level = zap.ErrorLevel
    case "warn":
        level = zap.WarnLevel
    default:
        level = zap.InfoLevel
    }

    encoderConfig := ecszap.NewDefaultEncoderConfig()

    var writes = []zapcore.WriteSyncer{write}

    if level == zap.DebugLevel {
        writes = append(writes, zapcore.AddSync(os.Stdout))
    }

    core := ecszap.NewCore(
        encoderConfig,
        zapcore.NewMultiWriteSyncer(writes...),
        level,
    )

    Logger = zap.New(
        core, zap.AddCaller(),
        zap.Fields(
            zap.String("application", viper.GetString("spring.application.name")),
            zap.String("serverIp", util.LocalIp()),
            zap.Int("port", viper.GetInt("server.port")),
            zap.String("profile", viper.GetString("spring.profiles.active")),
            zap.Any("logTime", time.Now().Format("2006-01-02 15:04:05.000")),
        ),
    )
}

设置gin使用自定义的logger

package router

import (
    "fmt"

    ginzap "github.com/gin-contrib/zap"
    "github.com/gin-gonic/gin"
    "go.uber.org/zap"
    "easymesh.net/search-service/log"
)

func NewRouter() *gin.Engine {
    gin.SetMode(gin.ReleaseMode)

    server := gin.Default()

    server.Use(Recovery)
    server.Use(ginzap.Ginzap(log.Logger, "2006-01-02 15:04:05.000", false))

    return server
}

func Recovery(c *gin.Context) {
    defer func() {
        if r := recover(); r != nil {
            log.Logger.Error("系统内部错误", zap.Error(fmt.Errorf("%v", r)))
        }
    }()
    c.Next()
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容