Go 自置的 log 库不如 Python 的 logging 强大。社区的 log 库跟内置的 log 库模型类似,但是功能更强。内置库的模型:
- 用 flag 控制大致的输出格式。无法像 Python 一样用格式字符串指定具体格式(如
%(levelname)s %(asctime)s %(module)s %(message)s
) - Logger 带一个 Out 属性,
io.Writer
类型,负责具体内容的输出,比如输出到控制台还是文件,由这个决定 - 没有 log level,但多了强行退出用的
panic
、fatal
- 没有带层级的 logger 体系(比如
a.b.c
与a.b
)
第三方库,看了 libhunt 以及 GitHub 上的库:
- Sirupsen/logrus 功能强大,推广了 structured logging 概念,但不再做大的更新(求稳定)
- uber-go/zap 及 rs/zerolog 是目前功能和性能都比较好的库
Web 框架也往往有内置的 log 实现。但我看了 echo 的实现,觉得很一般。
我倾向于使用 rs/zerolog,它的性能非常好,而且文档比 uber-go/zap 丰富太多。