首页 > 后端开发 > Golang > 正文

如何使用 uber-go/zap 按严重级别分离日志?

Susan Sarandon
发布: 2024-10-25 08:59:29
原创
570 人浏览过

How to Separate Logs by Severity Level Using uber-go/zap?

如何使用 uber-go/zap 根据日志级别将日志输出到 stdout 和 stderr

根据严重性级别分离日志uber-go/zap,利用“tee-ing”zapcore 核心的概念。该方法利用结合了两个独立核心的 Tee 核心,每个核心都具有特定的级别启用器。

实现:

  1. 定义级别启用器:

    <code class="go">infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool {
     return level == zapcore.InfoLevel
    })
    
    errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool {
     return level == zapcore.ErrorLevel || level == zapcore.FatalLevel
    })</code>
    登录后复制
  2. 设置写入同步器:

    <code class="go">stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)</code>
    登录后复制
  3. 构造 Tee Core:

    <code class="go">core := zapcore.NewTee(
     zapcore.NewCore(
         zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
         stdoutSyncer,
         infoLevel,
     ),
     zapcore.NewCore(
         zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
         stderrSyncer,
         errorFatalLevel,
     ),
    )</code>
    登录后复制
  4. 创建记录器:

    <code class="go">logger := zap.New(core)</code>
    登录后复制

演示:

<code class="go">logger.Info("info log")
logger.Error("error log")</code>
登录后复制

测试:
重定向标准输出或 stderr 到 /dev/null 以验证信息日志是否打印到 stdout,错误日志是否打印到 stderr:

$ go build main.go

$ ./main 2>/dev/null # displays only stdout logs
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:1626900981.520349,&quot;msg&quot;:&quot;info log&quot;}

$ ./main 1>/dev/null # displays only stderr logs
{&quot;level&quot;:&quot;error&quot;,&quot;ts&quot;:1626901025.056065,&quot;msg&quot;:&quot;error log&quot;}
登录后复制

以上是如何使用 uber-go/zap 按严重级别分离日志?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!