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

出于测试目的,现在我有了这个 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 读取或将日志保存到缓冲区的情况下执行此操作?我尝试了几次但没有运气。


我应该在这里更改什么才能在不创建文件的情况下读取测试日志?


守候你守候我
浏览 159回答 1
1回答

沧海一幻觉

似乎有一种构造方法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.Buffervar errorBuff bytes.Bufferlogger := zap.New(    zapcore.NewCore(zapcore.NewJSONEncoder(        zapcore.EncoderConfig{}), zapcore.AddSync(&buff),        zapcore.DPanicLevel    ),    zap.ErrorOutput(zapcore.AddSync(&errorBuff)),)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go