解决问题
- 系统监控(qps,成功率,失败率,机器,组件监控(jvm,消息队列,数据库,缓存))
- 业务监控(耗时,级别,成功率),
- 异常排查 (链路追踪(全局log id),分支,异常,关键位,业务流程)
日志规范
- 格式化输出(%v,%s,%d或者{},{},{})
- 分层级打印(info,debug,warn,err)
- 只用一个日志工具类(log4j, logback)
- 面向日志抽象类打印(slf4j) log.info/warn,方便后续升级或者日志框架替换
- 日志文件命名统一,系统名,年月日时分秒,分文件滚动确认是否采用默认值分配大小
- 所有系统文件路径尽量统一,便于采集
- 屏蔽第三方工具类的无效日志输出(有的框架日志乱打,可以督促公司相关日志进行升级)
具体日志
aop公共日志
- 接口耗时,
- rpc/http出入参,
- 调用方法,外层方法输入输出,部分方法开始结束位置,以及相关参数
内部
- 逻辑流转,
- 关键流程(影响程序进入分支(代码分支 if,swich),抛出异常前(error,exception),异常退出方法执行,关键结果输出,计算结果)
- 影响后续流程参数(定时时间,过期时间,延迟队列投放时间。。)
注意事项
- 日志不宜太多,影响主流程排查
- 外部返回结构体如果太长,可部分打印,如果是列表,可只打印列表长度(len(list))
- 部分日志信息避免重复,防止重名不易识别(order begin,a order begin ,b order begin)
- 日志链路尽量连贯,比如可以用reqid 追踪上下游链路
- 日志命名风格尽量统一(下划线命名,驼峰命名。。。)