标签: go-zap

如何初始化一个 zap 记录器并在其他 Go 文件中重用它?

我正在尝试从漂亮的 Logrus(对调试非常有帮助)迁移我的应用程序并引入 Uber 日志框架 Zap。

使用 Logrus,我只能初始化记录器一次并从其他 Go 文件中重用它,例如:

package main
import(
    // Print filename on log
    filename "github.com/onrik/logrus/filename"
    // Very nice log library
    log "github.com/sirupsen/logrus"
)

func main(){

// ==== SET LOGGING
    Formatter := new(log.TextFormatter)
    Formatter.TimestampFormat = "Jan _2 15:04:05.000000000"
    Formatter.FullTimestamp = true
    Formatter.ForceColors = true
    log.AddHook(filename.NewHook()) // Print filename + line at every log
    log.SetFormatter(Formatter)

}
Run Code Online (Sandbox Code Playgroud)

从其他 Go 文件中,我可以重用该记录器而无需任何其他初始化:

// VerifyCommandLineInput is delegated to manage the inputer parameter provide with the input flag from command line
func VerifyCommandLineInput() …
Run Code Online (Sandbox Code Playgroud)

logging go go-zap

14
推荐指数
3
解决办法
1万
查看次数

是否可以在运行时更新 zap 记录器的日志级别?

我创建了一个记录器kubebuilder,它基于 zap 记录器:

import (
    "flag"
    "github.com/gin-gonic/gin"
    "net/http"
    "os"
    "go.uber.org/zap/zapcore"
    uzap "go.uber.org/zap"
    // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
    // to ensure that exec-entrypoint and run can make use of them.
    _ "k8s.io/client-go/plugin/pkg/client/auth"

    "k8s.io/apimachinery/pkg/runtime"
    utilruntime "k8s.io/apimachinery/pkg/util/runtime"
    clientgoscheme "k8s.io/client-go/kubernetes/scheme"
    ctrl "sigs.k8s.io/controller-runtime"
    "sigs.k8s.io/controller-runtime/pkg/healthz"
    "sigs.k8s.io/controller-runtime/pkg/log/zap"

)

var (
    scheme   = runtime.NewScheme()
    setupLog = ctrl.Log.WithName("setup")
)

var zapOpts []uzap.Option
    zapOpts = append(zapOpts, uzap.AddCaller())
    zapOpts = append(zapOpts, uzap.AddCallerSkip(1))
    zapOpts = append(zapOpts, uzap.AddStacktrace(uzap.DebugLevel))

    opts := zap.Options{
        Development:     developmentFlag,
        StacktraceLevel: …
Run Code Online (Sandbox Code Playgroud)

logging go go-zap

8
推荐指数
2
解决办法
5648
查看次数

如何使用 go.uber.org/zap lib 以不同的日志级别打印不同的颜色,并根据日志级别将日志附加到不同的文件?

我开始在我的 Go 项目中使用 zap 日志库。我想根据日志级别将不同的颜色打印到 tty 控制台。

我发现该zap/internal/color包可以显示不同颜色的字符串,但我想用不同的颜色更改日志级别。

我还想将日志写入一些具有不同日志级别的日志文件。

如何初始化和配置 zap 记录器?

logging go go-zap

7
推荐指数
1
解决办法
5442
查看次数

Zap 记录器打印到控制台和日志文件

我已将 Zap 与我的 go 应用程序集成,我们将日志打印在两个日志文件中,并且我还使用 Lumberjack 进行日志轮换。但我也尝试在控制台中显示日志,但在这种情况下没有运气。以下是我在 logger.go 中的代码

var (
    Logger *zap.Logger
    N2n    *zap.Logger
)

type WriteSyncer struct {
    io.Writer
}

func (ws WriteSyncer) Sync() error {
    return nil
}

func InitLogging(mode string) {
    var cfg zap.Config
    var logName = "abc.log"
    var slogName = "n2n.log"

    if mode == "production" {
        cfg = zap.NewProductionConfig()
        cfg.DisableCaller = true
    } else {
        cfg = zap.NewDevelopmentConfig()
        cfg.EncoderConfig.LevelKey = "level"
        cfg.EncoderConfig.NameKey = "name"
        cfg.EncoderConfig.MessageKey = "msg"
        cfg.EncoderConfig.CallerKey = "caller"
        cfg.EncoderConfig.StacktraceKey = "stacktrace"
    }

    cfg.Encoding …
Run Code Online (Sandbox Code Playgroud)

logging go go-zap

7
推荐指数
2
解决办法
2万
查看次数

如何测试从自定义配置构建的 zap Logger 的日志记录?

我有一个从自定义配置(即config.Build())生成的 Zap 记录器。我想通过调用来测试记录器,例如,logger.Info()在测试方法中并断言结果以查看它是否符合配置集。我怎样才能做到这一点?

代码示例:

func GetLogger() *zap.Logger{
 config := &zap.Config{
  Encoding: "json",
  Level: zap.NewAtomicLevelAt(zapcore.InfoLevel),
  OutputPaths: []string{"stdout"},
  ErrorOutputPaths: []string{"stdout"},
  EncoderConfig: zapcore.EncoderConfig{
   MessageKey: "@m",
   LevelKey:    "@l",
   EncodeLevel: zapcore.CapitalLevelEncoder,
   TimeKey:    "@t",
   EncodeTime: zapcore.EpochMillisTimeEncoder,
   CallerKey:     "@c",
   EncodeCaller:  zapcore.ShortCallerEncoder,
   StacktraceKey: "@x",
  },
 }
 return config.Build()
}
Run Code Online (Sandbox Code Playgroud)

logging go go-zap

7
推荐指数
2
解决办法
2994
查看次数

如何将“真实”堆栈跟踪放在“stacktrace”键下,而不是“msg”键下?

给出以下代码(从此处复制):

     1  package main
     2  
     3  import (
     4      "fmt"
     5  
     6      "github.com/pkg/errors"
     7  
     8      "go.uber.org/zap"
     9  )
    10  
    11  func main() {
    12      logger, _ := zap.NewProduction()
    13      defer logger.Sync()
    14  
    15      sugar := logger.Sugar()
    16      result, err := caller1()
    17      if err != nil {
    18          sugar.Error(err)
    19          return
    20      }
    21      fmt.Println("Result: ", result)
    22  }
    23  
    24  func caller1() (int, error) {
    25      err := caller2()
    26      if err != nil {
    27          return …
Run Code Online (Sandbox Code Playgroud)

logging go go-zap

7
推荐指数
1
解决办法
5372
查看次数

如何配置 uber-go/zap 记录器来滚动文件系统日志?

如何配置uber-go/zaplogger api 将日志附加到指定的文件路径。是否可以使其像滚动文件附加器(基于文件大小或日期)一样工作而不影响性能?

filesystems logging go go-zap

6
推荐指数
1
解决办法
1万
查看次数

使用zap时如何自定义日志格式?

目前我们项目的日志格式是这样的:

www.abcdef.com`3`1s
Run Code Online (Sandbox Code Playgroud)

我想用Go重写项目并导入zap作为日志工具。通过 zap,日志的格式如下:

{"url": "www.abcdef.com", "attempt": 3, "backoff": "1s"}
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了它的用法,但没有找到任何将 zap 格式更改为上述格式的方法,所以我想在这里寻求一些建议。

logging go go-zap

5
推荐指数
1
解决办法
2万
查看次数

日志中的 Uber Zap 记录器函数名称

如何从 Uber Zap 日志记录中获取打印在日志中的函数名称?这是PR 请求,他们似乎添加了在日志中输出函数名称的功能。

我使用 golang 版本1.15和 go.uber.org/zap v1.16.0

这是我的代码:

package main

import (
    "go.uber.org/zap"
)

var logger *zap.Logger

func main() {
    logger := NewLogger()
    logger.Info("Test msg Main")
    TestFunc(logger)
}

func TestFunc(logger *zap.Logger)  {
    logger.Info("Test msg TestFunc")
}

func NewLogger() *zap.Logger {
    config := zap.NewDevelopmentConfig()
    opts := []zap.Option{
        zap.AddCallerSkip(1), // traverse call depth for more useful log lines
        zap.AddCaller(),
    }

    logger, _ = config.Build(opts...)
    return logger
}
Run Code Online (Sandbox Code Playgroud)

这是我在添加/不添加AddCaller()选项的情况下得到的输出

2021-03-01T15:00:02.927-0800    INFO    runtime/proc.go:204     Test msg …
Run Code Online (Sandbox Code Playgroud)

logging go go-zap

5
推荐指数
1
解决办法
4968
查看次数

Uber Zap Logger:如何在每个日志条目前面加上字符串

我将我的应用程序用作 SystemD 服务,并且需要在每条消息前添加<LEVEL>JournalD 的入门级别,例如:

<6> this is info
<7> this is debug
<4> this is warning
Run Code Online (Sandbox Code Playgroud)

否则,JournalD 将所有条目视为同一级别,我想使用其高级功能仅显示特定级别的日志。

<6>如何使用 uber-zap 库在每个日志条目前面添加正确的级别标签(例如 Info )?

编辑:这是我的记录器配置的相关部分:

<6> this is info
<7> this is debug
<4> this is warning
Run Code Online (Sandbox Code Playgroud)

go systemd systemd-journald go-zap

5
推荐指数
1
解决办法
5712
查看次数

标签 统计

go ×10

go-zap ×10

logging ×9

filesystems ×1

systemd ×1

systemd-journald ×1