如何记日志
在我之前的博客如何减少不能重现的Bug提到要遵守好的日志规范,今天就在介绍一下另外一篇文章Optimal Logging。要点如下:
日志中需要记录的:
- 重要的启动配置
- 错误
- 警告
- 对持久化数据的改变
- 主要系统模块之间的请求和应答
- 显著的状态变化
- 用户交互
- 已知有失败风险的调用
- 等待一个需要很长时间才能完成的条件
- 长时间运行的任务顶起的进度更新
- 显著改变逻辑分支的条件
- 宏观的处理步骤或者事件的总结(避免记录微观函数复杂流程的每一步)
日志中可能需要记录性能信息:
- 显著的系统调用
- 网络请求
- CPU密集的操作
- 于连接设备的交互
- 事务
日志中最好不要记录的:
- 函数入口(除非这个函数非常重要或者是在记录debug层的信息)
- 循环中的数据(除非是小循环,或者是一个大循环中定期的记录一些信息)
- 大消息或者文件的内容(截断或者总结来帮助调试)
- 良性错误(比如认为是正常流程的异常处理,容易迷惑读日志的人)
- 重复的错误
分层记录日志
典型的分层方式为:
- Debug:在debug过程中会用到的信息
- Info:最常用的
- Warning:奇怪或者非预期的状态,但是可以接受
- Error:出错了,但是程序可以恢复
- Critical:程序不能恢复,必须重启或者关闭
两种配置:
- 生产环境:除了Debug,别的全部打开
- 开发调试环境:全部打开