簡體   English   中英

如何為滾動文件系統日志配置 uber-go/zap 記錄器?

[英]How to configure uber-go/zap logger for rolling filesystem log?

如何配置uber-go/zap logger api 以將日志附加到指定的文件路徑。 它可以像滾動文件附加器(基於文件大小或日期)一樣工作而不影響性能嗎?

可以向 zap 記錄器添加一個鈎子,它將條目寫入lumberjack ,這是 Go 的滾動日志。

一個簡單的用法如下所示:

滾動日志:

// remember to call this at app (or scope) exit:
// logger.Close()
var lumlog = &lumberjack.Logger{
    Filename:   "/tmp/my-zap.log",
    MaxSize:    10, // megabytes
    MaxBackups: 3,  // number of log files
    MaxAge:     3,  // days
}

zap兼容鈎子:

func lumberjackZapHook(e zapcore.Entry) error {
    lumlog.Write([]byte(fmt.Sprintf("%+v", e)))
    return nil
}

並像這樣使用它:

logger, _ := zap.NewProduction(zap.Hooks(lumberjackZapHook))

編輯 1:我不確定這是否符合您在性能方面的要求。 這里面有很多因素。 例如,使用 SSD 硬盤會產生很大的不同,甚至可以通過批量寫入登錄一些時間序列數據庫。

編輯 2:在 zap 文檔中,它也使用伐木工人(但不是作為掛鈎)。

如果您想同時使用控制台日志和滾動日志而不使用鈎子,那么您可以執行以下操作:

// NewProductionZapLogger will return a new production logger backed by zap
func NewProductionZaplogger() (Logger, error) {
    conf := zap.NewProductionConfig()
    conf.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
    conf.DisableCaller = true
    conf.DisableStacktrace = true
    zapLogger, err := conf.Build(zap.WrapCore(zapCore))

    return zpLg{
        lg: zapLogger.Sugar(),
    }, err
}

func zapCore(c zapcore.Core) zapcore.Core {
    // lumberjack.Logger is already safe for concurrent use, so we don't need to
    // lock it.
    w := zapcore.AddSync(&lumberjack.Logger{
        Filename:   "./chat.log",
        MaxSize:    50, // megabytes
        MaxBackups: 30,
        MaxAge:     28, // days
    })

    core := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        w,
        zap.DebugLevel,
    )
    cores := zapcore.NewTee(c, core)

    return cores
}

我為 zap 和伐木工人編寫了一個更簡單的庫rzap

rzap.NewGlobalLogger([]zapcore.Core{
    rzap.NewCore(&lumberjack.Logger{
        Filename:   "/your/log/path/app.log",
        MaxSize:    10,   // 10 megabytes, defaults to 100 megabytes
        MaxAge:     10,   // 10 days, default is not to remove old log files
        MaxBackups: 10,   // 10 files, default is to retain all old log files
        Compress:   true, // compress to gzio, default is not to perform compression
    }, zap.InfoLevel),
})

zap.L().Info("some message", zap.Int("status", 0))

只為伐木工人和 zap 編寫這個簡單的庫

    rzap.NewGlobalLogger([]zapcore.Core{
    rzap.NewCore(&lumberjack.Logger{
        Filename:   "/your/log/path/app.log",
        MaxSize:    10,   // 10 megabytes, defaults to 100 megabytes
        MaxAge:     10,   // 10 days, default is not to remove old log files
        MaxBackups: 10,   // 10 files, default is to retain all old log files
        Compress:   true, // compress to gzio, default is not to perform compression
    }, zap.InfoLevel),
})

zap.L().Info("some message", zap.Int("status", 0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM