登录
首页 >  Golang >  Go问答

增强版的"Go" - 实现多个记录器同时输出到同一文件

来源:stackoverflow

时间:2024-02-13 19:21:23 378浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《增强版的"Go" - 实现多个记录器同时输出到同一文件》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我知道 golang 的 log.New() 可以使用它自己的输出编写器创建一个新的 Logger。

但是如果我为所有 5 个 log.New() Logger 提供相同的 io writer 会发生什么?示例:5x Logger(INFO、WARN 等)记录到使用 lumberjack 模块或 os.OpenFile 创建的同一文件。

这会产生问题吗? (例如没有并发写入?)

或者创建 5 个自动添加 INFO/WARN/ 等前缀的新日志函数的首选方法是什么?

谢谢! BR 马库斯


正确答案


documentation says

记录器序列化对其编写器的访问,但记录器之间没有协调。

记录器之间共享的写入器必须支持对 write 的并发调用,并且不得交错来自这些并发调用的数据。

如果编写器没有这些属性,请使用添加同步的类型包装编写器。

type syncWriter struct {
    mu sync.Mutex
    w  io.Writer
}

func (sw *syncWriter) Write(p []byte) (int, error) {
    sw.mu.Lock()
    defer sw.mu.Unlock()
    return sw.w.Write(p)
}

好了,本文到此结束,带大家了解了《增强版的"Go" - 实现多个记录器同时输出到同一文件》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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