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

在Golang中正确的全局日志记录方法,第1张

概述Go中的应用程序日志记录的模式是什么?如果我有,说,5 goroutines我需要登录,我应该… >创建一个log.Logger并传递它? >传递一个指向log.Logger的指针? >每个goroutine或函数应该创建一个记录器吗? >我应该将记录器创建为全局变量吗? Create a single log.Logger and pass it around? 这是可能的。一个log.Logg 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 )。

总结

以上是内存溢出为你收集整理的在Golang中正确的全局日志记录方法全部内容,希望文章能够帮你解决在Golang中正确的全局日志记录方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1275616.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存