首页 > 解决方案 > 如何将日志写入多个文件?

问题描述

在 Golang 中,你们如何根据包名将日志写入多个文件。

例如,在我当前的应用程序中,我试图从名为 Netapp、IBM 等但在同一个应用程序下的不同包中收集多个硬件统计信息。因此,我想将这些包中的日志写入单独的文件夹中,例如 /var/log/myapp/netapp.log 和 /var/log/myapp/ibm.log?

任何指针或线索会很有帮助吗?

谢谢詹姆斯

标签: gologging

解决方案


您可以采取的一种方法是实现观察者模式。当您需要使用相同的输入/事件发生几件事时,这是一种很好的方法。在您的情况下,将相同的输入记录到不同的日志中。您可以在此处找到更多信息。

在您描述并遵循此示例的情况下,您可以执行以下操作:

  1. 您的不同日志实现(具有不同的日志目标文件夹)可以Observer通过将每个日志实现的日志代码放入OnNotify方法中来实现接口。
  2. 创建一个实例eventNotifier并使用方法注册所有日志记录实现eventNotifier.Register。就像是:

      notifier := eventNotifier{
         observers: map[Observer]struct{}{},
      }
    
      notifier.Register(netAppLogger)
    
      notifier.Register(ibmLogger)
    
  3. eventNotifier.Notify随时随地使用您需要进行日志记录,它将使用所有已注册的日志记录实现。


推荐阅读