登录
首页 >  Golang >  Go问答

使用自定义设置与樵夫进行 zap 日志记录

来源:stackoverflow

时间:2024-03-19 23:18:36 463浏览 收藏

在构建自定义 Zap 记录器时,可以通过自定义配置和使用 Lumberjack 来实现高级日志记录。然而,如何将这两个配置应用到 Zap 记录器中却是一个常见问题。本指南提供了明确的示例,展示了如何使用 `zap.RegisterSink` 函数和 `config.OutputPaths` 字段添加自定义日志目标,并使用一个瘦包装类型轻松地为 `*lumberjack.Logger` 添加 `Sync` 方法,从而将自定义配置和 Lumberjack 集成到 Zap 记录器中。

问题内容

我正在尝试使用 1) 自定义 *zap.config 和 2) lumberjack 构建自定义 zap 记录器,但找不到应用这两种配置的正确示例。

由于 config.build 不接受 writesync 作为输入。你知道如何实现这一目标吗?

func genBaseLoggerZap() Logger {
    ex, err := os.Executable()
    if err != nil {
        Fatalf("Failed to get os.Executable, err: %v", err)
    }
    zlManager.outputPath = path.Join(filepath.Dir(ex), zlManager.outputPath)
        // Want to add sync here..
    zapcore.AddSync(&lumberjack.Logger{
        Filename:   zlManager.outputPath + "123",
        MaxSize:    500,
        MaxBackups: 10,
        MaxAge:     28,
    })
    return genLoggerZap(BaseLogger, genDefaultConfig())
}

// genLoggerZap creates a zapLogger with given ModuleID and Config.
func genLoggerZap(mi ModuleID, cfg *zap.Config) Logger {
    logger, err := cfg.Build()
    if err != nil {
        Fatalf("Failed to generate zap logger, err: %v", err)
    }
    newLogger := &zapLogger{mi, cfg, logger.Sugar()}
    newLogger.register()
    return newLogger
}

解决方案


您可以使用 zap.registersink 函数和 config.outputpaths 字段添加自定义日志目标。 registersink 将 url 方案映射到 sink 构造函数,outputpaths 配置日志目标(编码为 url)。

方便的是,*lumberjack.logger 已经实现了几乎所有 zap.sink 接口。仅缺少 sync 方法,可以使用瘦包装类型轻松添加该方法。

package main

import (
    "net/url"

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

type lumberjackSink struct {
    *lumberjack.Logger
}

// Sync implements zap.Sink. The remaining methods are implemented 
// by the embedded *lumberjack.Logger.
func (lumberjackSink) Sync() error { return nil }

func main() {
    zap.RegisterSink("lumberjack", func(u *url.URL) (zap.Sink, error) {
        return lumberjackSink{
            Logger: &lumberjack.Logger{
                Filename: u.Opaque,

                // Use query parameters or hardcoded values for remaining
                // fields.
            },
        }, nil
    })

    config := zap.NewProductionConfig()

    // Add a URL with the "lumberjack" scheme.
    config.OutputPaths = append(config.OutputPaths, "lumberjack:foo.log")

    log, _ := config.Build()
    log.Info("test", zap.String("foo", "bar"))
}

本篇关于《使用自定义设置与樵夫进行 zap 日志记录》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>