登录
首页 >  Golang >  Go问答

全局日志记录的正确方法

来源:Golang技术栈

时间:2023-04-29 13:17:24 121浏览 收藏

大家好,我们又见面了啊~本文《全局日志记录的正确方法》的内容中将会涉及到golang等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

Go 中应用程序登录的模式是什么?如果我有 5 个 goroutines 我需要从中登录,我应该...

  • 创建一个单曲log.Logger并传递它?
  • 传递一个指向那个的指针log.Logger
  • 每个 goroutine 或函数都应该创建一个记录器吗?
  • 我应该将记录器创建为全局变量吗?

正确答案

  • 创建一个 log.Logger 并传递它?

这是可能的。一个log.Logger可以在多个 goroutine 中同时使用。

  • 传递指向该 log.Logger 的指针?

log.New返回 a*Logger通常表明您应该将对象作为指针传递。将其作为值传递将创建结构的副本(即 Logger 的副本),然后多个 goroutine 可能会同时写入同一个io.Writer。这可能是一个严重的问题,具体取决于编写器的实现。

  • 每个 goroutine 或函数都应该创建一个记录器吗?

我不会为每个函数或 goroutine 创建单独的记录器。Goroutines(和函数)用于非常轻量级的任务,这些任务不能证明维护单独的记录器是合理的。为项目的每个较大组件创建一个记录器可能是个好主意。例如,如果您的项目使用 SMTP 服务来发送邮件,那么为邮件服务创建单独的记录器听起来是个好主意,这样您就可以单独过滤和关闭输出。

  • 我应该将记录器创建为全局变量吗?

这取决于你的包裹。在前面的邮件服务示例中,为每个服务实例设置一个记录器可能是个好主意,这样用户可以在使用 gmail 邮件服务时记录失败,而不是使用本地 MTA 时发生的失败(例如 sendmail )。

今天带大家了解了golang的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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