Go中应用程序登录的模式是什么?如果我有例如需要登录的5个goroutine,我应该…
log.Logger
创建一个log.Logger并传递给他?
那是可能的。甲log.Logger可以同时从多个够程中使用。
传递指向该日志的指针。
log.New返回a *Logger,通常表明您应该将对象作为指针传递。将其作为值传递将创建该结构的副本(即Logger的副本),然后多个goroutine可能会同时写入同一io.Writer。根据作者的实现,这可能是一个严重的问题。
*Logger
每个例程或函数都应创建一个记录器吗?
我不会为每个函数或goroutine创建单独的记录器。Goroutine(和函数)用于执行非常轻量级的任务,这些任务不足以维护单独的记录器。为项目的每个较大组件创建一个记录器可能是一个好主意。例如,如果您的项目使用SMTP服务发送邮件,那么为邮件服务创建单独的记录器听起来是个好主意,这样您就可以分别过滤和关闭输出。
我应该将记录器创建为全局变量吗?
那取决于你的包裹。在前面的邮件服务示例中,为每个服务实例都配备一个记录器可能是一个好主意,以便用户可以在使用gmail邮件服务时记录故障,而与使用本地MTA时发生的故障(例如sendmail)不同。 )。