关于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