当前位置: 首页 > 面试题库 >

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

酆鸿哲
2023-03-14
问题内容

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

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

问题答案:
  • 创建一个log.Logger并传递给他?

那是可能的。甲log.Logger可以同时从多个够程中使用。

  • 传递指向该日志的指针。

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

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

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

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

那取决于你的包裹。在前面的邮件服务示例中,为每个服务实例都配备一个记录器可能是一个好主意,以便用户可以在使用gmail邮件服务时记录故障,而与使用本地MTA时发生的故障(例如sendmail)不同。
)。



 类似资料:
  • 看过本章第一节的同学应该还记得,log_by_lua* 是一个请求经历的最后阶段。由于记日志跟应答内容无关,Nginx 通常在结束请求之后才更新访问日志。由此可见,如果我们有日志输出的情况,最好统一到 log_by_lua* 阶段。如果我们把记日志的操作放在 content_by_lua* 阶段,那么将线性的增加请求处理时间。 在公司某个定制化项目中,Nginx 上的日志内容都要输送到 syslo

  • 问题内容: 我想知道如何实现一个全局记录器,该记录器可以用自己的设置在任何地方使用: 我目前有一个自定义记录器类: 该类在一个单独的文件中,其中包含一些格式化程序和其他内容。记录器可以完美地独立运行。 我将此模块导入我的主python文件中,并创建一个像这样的对象: 但显然,我无法从代码的其他部分访问此对象。我使用错误的方法吗?有一个更好的方法吗? 问题答案: 使用创建一个名为全球记录。 main

  • 主要内容:Logger日志方法的例子,Logger的日志方法Logger 类有多种方法来处理日志记录活动。Logger 类不允许我们实例化一个新的 Logger 实例,但它支持两种获取 Logger 对象的静态方法: 两个方法中的第一个返回应用程序实例的根记录器,它没有名称。 任何其他命名的 Logger 对象实例都是通过传递记录器的名称由第二种方法获得的。记录器的名称可以是您传递的任何字符串,通常是类或包名称,如下所述: Logger日志方法的例子 Lo

  • 上次我在考虑如何在我们的应用程序中正确使用记录器。例如,我有一个控制器,它返回一个用户流,但在日志中,我看到“Fetch users”日志是由另一个线程记录的,而不是处理管道上的线程,但这是一个好的方法吗? 在这种情况下,使用了两个线程,从我的角度来看,这不是一个好的选择,但我找不到在反应应用程序中使用记录器的好做法。我认为下面的方法更好,因为分配内存是来自处理线程,而不是来自spring web

  • 本文向大家介绍CodeIgniter记录错误日志的方法全面总结,包括了CodeIgniter记录错误日志的方法全面总结的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了CodeIgniter记录错误日志的方法。分享给大家供大家参考,具体如下: CI工作流程: 所有的入口都从根目录下的index.php进入,确定应用所在目录后,加载 codeigniter/CodeIgniter.php 文件

  • 我有一个SpringCloudGateway应用程序,它充当我的数据服务的网关。我的应用程序使用SSE在UI中推送通知。当我看到网关日志时,我的日志中充满了异常,如: 我有一个错误处理程序类: 但它仍在记录错误。如何使我的网关不写入日志。 我的pom文件是: 我的依赖关系树: