为了账号安全,请及时绑定邮箱和手机立即绑定

GO lang 日志包的限制

GO lang 日志包的限制

Go
拉莫斯之舞 2022-04-20 17:25:26
我在 Go 中实现记录器。我正在考虑为此使用 logrus。我想了解内置日志包的局限性。我知道如果我们想将日志写入文件或实现滚动文件日志等,我们需要手动添加此功能。是否有任何其他限制我们必须选择外部日志包?
查看完整描述

2 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

使用内置log包记录到文件不是问题,您可以使用log.SetOutput()Logger.SetOutput()设置io.Writer除默认值之外的目标os.Stderr,例如文件*os.File

缺少并且经常希望得到的是分级日志记录(例如INFOWARNDEBUGERROR)。对于推理,请阅读博客文章Dave Cheney:让我们谈谈日志记录

除非这些包“愿意”合作(例如,它们提供功能) ,否则您也不能强制log.Logger指定包使用特定的包。SetLogger()

滚动日志文件也是一个缺失的功能。

另一方面,“扩展”标准记录器以登录 MongoDB 也很容易,例如,有关详细信息,请参阅Go: Create io.Writer inteface for logging to mongodb database。使用 MongoDB,您还可以使用Capped 集合,它会隐含地为您提供“滚动文件”功能。


查看完整回答
反对 回复 2022-04-20
?
海绵宝宝撒

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 已经为您提供了很多这样的功能,因此如果您只想快速实现日志记录,这可能是您最好的选择。


查看完整回答
反对 回复 2022-04-20
  • 2 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号