加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Golang中正确的全局日志记录方法

发布时间:2020-12-16 18:07:37 所属栏目:大数据 来源:网络整理
导读:Go中的应用程序日志记录的模式是什么?如果我有,说,5 goroutines我需要登录,我应该… 创建一个log.Logger并传递它? 传递一个指向log.Logger的指针? 每个goroutine或函数应该创建一个记录器吗? 我应该将记录器创建为全局变量吗? Create a single log.L
Go中的应用程序日志记录的模式是什么?如果我有,说,5 goroutines我需要登录,我应该…

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

  • Create a single log.Logger and pass it around?

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

  • Pass around a pointer to that log.Logger?

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

  • Should each goroutine or function create a logger?

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

  • Should I create the logger as a global variable?

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读