在很多情况下,相信查日志是一件很频繁的事情,那么怎么记录日志,会让查验问题的效率提高呢。
其实也很简单,总结起来就是两个方面:
- 全面
- 精要
日志的查询满足满足两个条件,大部分的问题可以通过简单快速的查询方式,少部分需要深入的问题可以直接使用代码打印的日志。
对于大部分的日志查询,可以通过平台实现,比如,服务器在自己的机房,可以搭个elk,如果服务器在第三方,可用第三方的日志平台。这一块的日志,要全面,包含每个节点、模块。举个例子:一个完整的业务由好几个服务组成,那么日志就要把每个服务参与的方法,通过切面形式展示,包括:业务的唯一id、模块名称、方法名、入参、出参、耗时等等条件,可参考阿里云的log2日志的记录方式:
accountId:
apiKey
appId
className
ctime
errorCode
globalId
inStr
info
inputText
ip
level
levelText
lineNumber
localId
logid
methodName
moduleName
order:
outCode
outStr
parseType
seqTime
state
time
timeUsed
type
userId
把大的平台搭建起来之后,追踪业务就很方便。但是如果遇到异常情况,通过业务链没办法追踪,就需要精确定位,这一块的日志通过代码日志实现。怎么打印呢?在项目的设计中,会根据业务画出流程图,精确到每个代码分支,然后,在每一个分支都打印出必要日志信息:业务id、用户id、等等其他参数,但是要注意打印的日志不能太多,不然会造成追踪困难和内存不够。这样在查询代码异常问题时,就很容易了解到是哪一个环节出现了错误。