任何一个系统开发,都离不开完备的日志系统。go 日志不同其他语言,比如 java 由于 commons-logging 日志标准,和不同实现 如log4j,slf4j,logback,但都是统一调用标准接口;python 中标准logging 模块,功能强大,基本上满足各种需求。但是在golang 语言开发中,目前阅读了几个开源代码,都是自己实现了一套日志记录标准,并没有采用go 官方 log 模块。golang's log 模块主要提供了3类接口。分别是 “Print Panic Fatal ”,对每一类接口其提供了3中调用方式,分别是 "Xxxx 、 Xxxxln 、Xxxxf",基本和fmt中的相关函数类似;但功能有限,很难比如按天,按照容量自动输出拆封生成新日志。如果自己开发一套日子,基本上要满足日志等级输出如DEBUG,INFO,WARN,ERROR/FATAL 、支持输出 console 和滚动式文件、参数格式化输出、自定义格式化模板,当然如果支持更高级别如按照pakcage输出到不同文件,按照日志级别输出到不同地方那就更帅气了。

下面罗列觉得可能后期会用开源项目

log 对比
project starsforksdescription
89951071Logrus is a structured logger for Go (golang), completely API compatible with the standard library logger.
5292376blazing fast, structured, leveled logging in Go.
141485The zerolog package provides a fast and simple logger dedicated to JSON output.
22032BLog4go is an efficient logging library written in the Go programming language, providing logging hook, log rotate, filtering and formatting log message.
    

logrus是已知的Go语言日志库中在github中stars数最多的日志库,功能强大,性能也不错。另外值得一提的是logrus的一个fork库gogap/logrus,可以配置输出到文件和graylog日志系统,基础的level、调用链、行号,文件切分都有,特色是结构化日志可以被统计和索引,借助graylog就可以做日志分析,不过这个库很久没有维护了。

zap是Go中一个快速,结构化,分级日志库,Uber出品。能够激活强大的ad-hoc分析, 灵活的仪表板, 其功能超过其他工具ELK, Splunk, 和 Sentry. 所有日志消息都是JSON-serialized。具体参考 Go高性能日志库zap详细分析 。

zerolog也是一款性能相当好的日志库,有趣的是zerolog和zap都在自家的Github库首页中的性能对比数据里打败了对方,zerolog 是受到uber 的日志库zap 的启发,golang社区里,对高性能日志库的追求,引发了编译器团队对一些使用模式的优化。

blog4go是高性能日志库。创新地使用“边解析边输出”方法进行日志输出,同时支持回调函数、日志淘汰和配置文件。可以解决高并发,调用日志函数频繁的情境下,日志库造成的性能问题。

 最后 提供两个  benchmark库,提供的部分Go日志库的性能对比数据,供技术选型时参考

  https://github.com/hnakamur/go-log-benchmarks
  https://github.com/imkira/go-loggers-bench