【问题标题】:defer log.SetOutput(os.Stdout) after log.SetOutput(ioutil.Discard)在 log.SetOutput(ioutil.Discard) 之后延迟 log.SetOutput(os.Stdout)
【发布时间】:2014-04-03 14:55:19
【问题描述】:

go-nsq库(https://github.com/bitly/go-nsq/blob/master/writer_test.go#L38)中,我找到了以下代码:

log.SetOutput(ioutil.Discard)
defer log.SetOutput(os.Stdout)

为什么作者在丢弃日志后推迟到标准输出?

【问题讨论】:

    标签: logging go nsq go-nsq


    【解决方案1】:

    log.SetOutput(ioutil.Discard) 语句更改标准记录器输出目标。 defer log.SetOutput(os.Stdout) 语句尝试在函数结束时将输出目标重置为其初始值。但是,它应该已将其重置回 os.Stderr

    src/pkg/log/log.go

    var std = New(os.Stderr, "", LstdFlags)
    

    【讨论】:

    • 谢谢,@peterSO!为什么作者要将日志转储到/dev/null 并稍后将其设置回来?在单元测试中记录错误不是一件好事吗?
    • @Mingyu:测试只关心没有错误,即err == nil。记录的信息和错误消息的文本被认为不重要或杂乱无章。运行测试而不丢弃记录的消息。丢弃它们是否明智?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多