Golang: Logging

30th April 2021 at 12:08pm
Golang

了解下线程安全部分的内容。

Go 自置的 log 库不如 Python 的 logging 强大。社区的 log 库跟内置的 log 库模型类似,但是功能更强。内置库的模型:

  • 用 flag 控制大致的输出格式。无法像 Python 一样用格式字符串指定具体格式(如 %(levelname)s %(asctime)s %(module)s %(message)s
  • Logger 带一个 Out 属性,io.Writer 类型,负责具体内容的输出,比如输出到控制台还是文件,由这个决定
  • 没有 log level,但多了强行退出用的 panicfatal
  • 没有带层级的 logger 体系(比如 a.b.ca.b

第三方库,看了 libhunt 以及 GitHub 上的库:

Web 框架也往往有内置的 log 实现。但我看了 echo 的实现,觉得很一般。

我倾向于使用 rs/zerolog,它的性能非常好,而且文档比 uber-go/zap 丰富太多。

TOC