Go记录日志到多个输出

6

在go语言中,有没有一种方法可以在不同级别的多个输出中记录日志?

我想编写一个程序,以Info级别将日志记录到stdout,并在debug级别时同时将其记录到带有时间戳的文件中。

就像每次我编码时:

log.Debug("Entering some func")
res := func()
log.Infof("Result was: %s", res)

我可以看到控制台打印出了以下内容:
Result was: Successful

And a file with:

2015-03-26T01:27:38-04:00 [DEBU]: Entering some func
2015-03-26T01:27:38-04:00 [INFO]: Result was: Successful

我使用logrus和glog,但找不到这个功能。是否有其他的包或我可以编写的东西?
4个回答

10

我在寻找一种记录到多个目标的方法时发现了这个东西。 如果您只需要这个,而不担心日志级别,最简单的方法是使用io.Multiwriter

multi := io.MultiWriter(file, os.Stdout)
log.SetOutput(multi)

这是最佳答案,因为它可以添加到使用标准“log”库的任何现有代码中。 - Shadoninja

8

Go-logging 支持不同的日志后端,如文件、syslog等。可以为每个后端和记录器设置不同的日志级别,支持多个后端。示例在这里

Lumberjack 也可用于将日志写入滚动文件。这里是一个示例


1
如果你使用go-logging库,你可以设置两个“后端”,一个将写入stdout,另一个将写入文件。
我会复制一些代码在这里,但是维基上的例子正好符合你的要求。

1

mw := io.MultiWriter(os.Stdout, logFile) logrus.SetOutput(mw)

从这里开始 https://github.com/Sirupsen/logrus/issues/230

以上代码意为:创建一个同时向标准输出和日志文件写入的多重写入器,并将其设置为logrus的输出。更多信息请参考链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接