gpt4 book ai didi

go - 使用 1) 自定义配置和 2) lumberjack 进行 zap 日志记录

转载 作者:IT王子 更新时间:2023-10-29 02:07:53 24 4
gpt4 key购买 nike

我正在尝试使用 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 接口(interface)。仅缺少 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"))
}

关于go - 使用 1) 自定义配置和 2) lumberjack 进行 zap 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54395407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com