Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 使用1)定制配置和2)伐木工人进行zap日志记录_Go_Logging - Fatal编程技术网

Go 使用1)定制配置和2)伐木工人进行zap日志记录

Go 使用1)定制配置和2)伐木工人进行zap日志记录,go,logging,Go,Logging,我正在尝试使用1)customized*zap.Config和2)customizedlumberjack构建一个定制的zap记录器,但找不到应用这两种配置的适当示例 因为config.Build不接受WriteSync作为输入。你知道如何做到这一点吗 func genBaseLoggerZap() Logger { ex, err := os.Executable() if err != nil { Fatalf("Failed to get os.Execut

我正在尝试使用1)customized
*zap.Config
和2)customized
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方案映射到接收器构造函数,并配置日志目标(编码为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"))
}