2 回答

TA贡献1772条经验 获得超6个赞
使用内置log
包记录到文件不是问题,您可以使用log.SetOutput()
或Logger.SetOutput()
设置io.Writer
除默认值之外的目标os.Stderr
,例如文件*os.File
。
缺少并且经常希望得到的是分级日志记录(例如INFO
、WARN
、DEBUG
等ERROR
)。对于推理,请阅读博客文章Dave Cheney:让我们谈谈日志记录。
除非这些包“愿意”合作(例如,它们提供功能) ,否则您也不能强制log.Logger
指定包使用特定的包。SetLogger()
滚动日志文件也是一个缺失的功能。
另一方面,“扩展”标准记录器以登录 MongoDB 也很容易,例如,有关详细信息,请参阅Go: Create io.Writer inteface for logging to mongodb database。使用 MongoDB,您还可以使用Capped 集合,它会隐含地为您提供“滚动文件”功能。

TA贡献1809条经验 获得超8个赞
记录到文件可以通过多种方式完成。
这样做的 12 因素应用程序方式(不仅仅是 12 因素应用程序方式,而且 12 因素应用程序都强调这样做)是登录到 STDOUT 和/或 STDERR,然后将其通过管道传输到其他地方进行部署。这也使开发变得容易。此外,如果您使用容器之类的东西来部署程序,它们会将容器的 STDOUT 和 STDERR 记录到一个文件中。
std liblog包有两种方法可以将输出更改为文件。
一种方法如下:
log.SetOutput(<something that implements io.Writer, probably os.File>)
log.Println("some message")
另一个是:
logger := log.New(<something that implements io.Writer, probably os.File>, <a prefix String>, <some flag, see https://golang.org/pkg/log/#pkg-constants>)
logger.Println("some message")
第二个选项也是如何通过让每个级别成为自己的记录器来实现不同的日志级别(即 INFO、DEBUG、WARN、ERROR 等)。
但是 logrus 已经为您提供了很多这样的功能,因此如果您只想快速实现日志记录,这可能是您最好的选择。
- 2 回答
- 0 关注
- 230 浏览
添加回答
举报