登录
首页 >  Golang >  Go问答

在不需要创建文件的情况下,如何使用 zap.logger 从 stdout 简单地读取

来源:stackoverflow

时间:2024-02-06 19:18:24 165浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《在不需要创建文件的情况下,如何使用 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 读取或将日志保存到缓冲区的情况下做到这一点? 我尝试了几次,但没有成功。

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


正确答案


好像有一个构造方法 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 指定将数据写入何处。您只需设置一个 bytes.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)),
)

本篇关于《在不需要创建文件的情况下,如何使用 zap.logger 从 stdout 简单地读取》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>