为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 zap.logger 简单地从 stdout 读取(而不创建文件)

如何使用 zap.logger 简单地从 stdout 读取(而不创建文件)

Go
守候你守候我 2023-02-14 17:34:41
出于测试目的,现在我有了这个 zapLogger 的配置,并写入了“errors.log”。在测试中,我读取了文件,比较了一些需要的文本,并在测试完成后将其删除。l := logger.New(zap.Config{Level: level, Encoding: "json", OutputPaths: []string{"errors.log"}}).    With(zap.String("app-env", cfg.APP.Environment), zap.String("app-version", cfg.APP.Version))//reading logs in different file...data, _ := os.ReadFile("errors.log")actual := string(data)是否可以在不创建文件并从 os.Stdout 读取或将日志保存到缓冲区的情况下执行此操作?我尝试了几次但没有运气。我应该在这里更改什么才能在不创建文件的情况下读取测试日志?
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

似乎有一种构造方法func New(core zapcore.Core, options ...Option)(https://github.com/uber-go/zap/blob/master/logger.go#L67)因为Core有一种构造方法func NewCore(enc Encoder, ws WriteSyncer, enab LevelEnabler)(https://github.com/uber-go/ zap/blob/master/zapcore/core.go#L58 ),ws指定将数据写入的位置。您可以直接设置 abytes.Buffer并WriteSyncer传递它。


请注意,对于日志记录中发生的错误,似乎需要WriteSyncer设置另一个错误。当你创建一个新的记录器时,你可以传递一个ErrorOutput选项(https://github.com/uber-go/zap/blob/master/options.go#L55 )。


这是一个草图:


import (

    "go.uber.org/zap"

    "go.uber.org/zap/zapcore"

)


var buff bytes.Buffer

var errorBuff bytes.Buffer

logger := zap.New(

    zapcore.NewCore(zapcore.NewJSONEncoder(

        zapcore.EncoderConfig{}), zapcore.AddSync(&buff),

        zapcore.DPanicLevel

    ),

    zap.ErrorOutput(zapcore.AddSync(&errorBuff)),

)


查看完整回答
反对 回复 2023-02-14
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信