关于golang中其他各种日志插件对比,这里不再赘述,直奔zap主题,啊哈哈,理论小结+实战,不扯淡,纯干货,嘎嘎,动起来。
目录
前言
使用小结
动手实战
基于zap+file-rotatelogs实现按天分隔日志
基于zap+lumberjack实现按天分隔日志
写在最后
前言为什么选择zap:
- zap是非常快的、结构化的,分日志级别的Go日志库
- 它同时提供了结构化日志记录和printf风格的日志记录
以下是Zap发布的基准测试信息
记录一条消息和10个字段:
Package | Time | Time % to zap | Objects Allocated |
---|---|---|---|
?? zap | 862 ns/op | +0% | 5 allocs/op |
?? zap (sugared) | 1250 ns/op | +45% | 11 allocs/op |
zerolog | 4021 ns/op | +366% | 76 allocs/op |
go-kit | 4542 ns/op | +427% | 105 allocs/op |
apex/log | 26785 ns/op | +3007% | 115 allocs/op |
logrus | 29501 ns/op | +3322% | 125 allocs/op |
log15 | 29906 ns/op | +3369% | 122 allocs/op |
使用小结
哎,之前思考的少,都是拿来主义,就知道用别人写好的,自己搞,才发现不少细节。分享个小结:
日志按大小切割和备份个数、文件有效期,一般选zap+lumberjack
日志按天或者小时切割,一般选zap+file-rotatelogs
zap中Logger和SugaredLogger的区别:
- Zap提供了两种类型的日志记录器—SugaredLogger和Logger
- 在性能很好但不是很关键的上下文中,使用SugaredLogger。它比其他结构化日志记录包快4-10倍,并且支持结构化和printf风格的日志记录
- 在每一微秒和每一次内存分配都很重要的上下文中,使用Logger。它甚至比SugaredLogger更快,内存分配次数也更少,但它只支持强类型的结构化日志记录
- SugaredLogger是在Logger的基础上,提供了额外参数的格式化方式,提供更大的便利性以格式化具体的msg,在可能带来风险的同时,还会造成额外的内存分配
动手实战
基于zap+file-rotatelogs实现按天分隔日志
实现功能点:
- 按照不同级别日志独立文件记录(可以参考info级别自己动手扩展下)
- 日志按天分割
- 只保留近30天的日志
编码:
效果如下:
基于zap+lumberjack实现按天分隔日志
实现功能点:
- 按照500M文件大小切割文件
- 最多保留200个文件
- 最多保留30天
- 支持文件压缩
编码:
效果如下:
写在最后
上面的仅仅是zap的基本应用,想玩的更加顺手、深入,自己入门后多动手,遇到问题看看源码,嘎嘎,886。
参考链接:https://www.cnblogs.com/Golanguage/p/12285584.html