# 1 怎么用日志级别?
//核心流程用info,可恢复异常用warn,调试信息用debug,必须要处理的错误用error
# 1.1 什么时候打日志?
~~~
info日志:核心流程、重要函数开始/中间/结束需要有info日志,类似于事件模型,preFunc() 、doFunc() 、afterFunc(),可以理解成做这件事需不需要传递一个事件出来!pre常用是上游到下游的调用事件需要记录参数,after常用是调用函数,调用下游成功与否事件,包含返回值和上下文。
debug日志:所有的非正常的逻辑分支都应该至少有一个debug日志,或者warning、error日志出来,可以理解为一个异常的事件。
warning和error日志:错误情况必须得有一条错误或者警告的日志
~~~
# 2 日志记录那些数据?
//记录入口和出口参数,与排查问题时所需要要的参数
~~~
log.Infof("check comment permission start,uid %d,feed_id %d", uid, feedId)
log.Infof("check comment permission end,uid %d,feed_id %d,has permission %t", uid, feedId,hasPersmission)
info:我开始干活了
info:我刚才写了10W行代码,所有bug都被修复了
~~~
> 打印指针用*feeds,不过需要注意feeds为nil的情况,打印map[string]pb 可以直接打印出内容,打印[]*int只能打印数组项地址,如果想打印值需要实现String()函数
# 3 线上必须用info级别?
是的,有必要可以修改配置开启debug,线上查看debug日志
# 4 到底多打还是少打?
做到多一条嫌太多,少一条不够用
# 5 记录还是抛给上层?
下层尽量记录错误,并且抛给上层处理错误,下层记录的日志和上层记录的日志上下文其实是不一样的