1 浅谈日志
什么是日志?它不局限于系统日志,程序日志,操作日志,凡是时序相关的、持续产生的数据,都可以称为日志。
日志通过收集、结构化、过滤等步骤后,为开发者排查问题提供了依据,也是监控、报警系统的基石。同时也为我的工作提供了保障。
无日志记录时用(lao)户(ban):小龚,为什么我打完这个关卡没有评分?
我:好的,我去看一下。
半小时后 ... ...
用(lao)户(ban):小龚,知道是什么原因了吗?
我:我复现不了这个问题,暂时不知道是什么原因。
我的内心 OS:这次涨工资没戏了。
有日志记录时
用(lao)户(ban):小龚,为什么我打完这个关卡没有评分?
我:好的,我去查一下日志。
一分钟后 ... ...
我:
我的内心 OS:策划这次涨工资没戏了,嘿嘿。
2 关于日志包
设计一个日志包,需要考虑的基础功能有日志级别设置、标准输出和文件、输出格式配置、日志的时间戳、文件与打印行号、正文。高级功能有按级别分类输出、支持结构化日志、支持日志轮转。
本日志包基于 zap 实现,代码量限制在 800 行左右(不包含测试代码),目前支持的特性有:
- 颜色输出,告别黑白,
尽显尊贵打工人身份 - 支持多种日志级别,遵守 Go 语言设计哲学
- 支持日志轮转,日志大小达到一定量级时,对日志进行切割、压缩,并转存
- 具备 Hook 能力。例如某个级别日志产生时,调用告警接口
- 兼容标准库
log
,轻松替代标准log
- ...
接下来我们将一起,一步一步实现这个日志包的各个功能,最终实现一个可用于生产环境的日志包。每实现一个特性,都会添加可执行的单元测试。
3 目录
- 输出级别与初始化配置
- 各级别日志打印函数
- 结构化输出格式
- 我想把这玩意儿染成绿的(支持颜色输出)
- 欲练神功,必先...(日志切割、压缩、转存)
- 兼容标准库
log
4 其他
本系列文章的目录结构与文章名灵感来自 极客兔兔。
如果文章对你有用,点个赞,就是对我的写作最大的鼓励。
本人技术能力捉襟见肘,如果有写的不对的地方,请留言斧正,十分感谢 🙇