日志的区分与汇总方式: 一次事务采用独特标记与事务内异步事务的附加标记方式, 说明如下:#
- 为每次HTTP事务分配一个id, 本次事务内全部日志都输出该标记, 方便查找时以此为唯一索引, 可以查找这次请求过程中所有相关输出
- 单次事务中, 所有对外部依赖的操作(包括接口请求,Redis操作,MongoDB操作等)均加独特id标记, 并附加到请求的id后, 构成形如:
<user-request-id>:<redis-request-id>
的形式, 内部再有细节划分则追加到后面, 以冒号分隔(其它分隔符也可以, 主要是为了更好的使用阿里云日志的搜索功能)
id生成算法:1
2
3
4
5// 10(或11)位的短字符串
Math.random().toString(36).substr(2)
// 唯一程度更高的19(或18)位字符串
Math.random().toString(36).substr(2)+new Date().getTime().toString(36)长内容的隐藏与查找#
在使用id进行查找时, 存在着有些内容返回过多, 不需要展示的情况(如请求的响应信息, 只在必要时才需要查找出来), 此时, 最好不要使用id前缀, 否则容易被长内容干扰, 抓不住重点.
为了解决这个问题, 可以在存在长内容的时候使用两条记录: 一条内容包含id, 同时包含一个随机串, 通过随机串可以查找到具体内容:1
2log.info(logPrefix + ":请求信息key:" + uniqueKey);
log.info(uniqueKey + ": 请求详细信息: " + result);日志记录的内容:#
- 标识部分: 用户标识/页面标识/关键判定/
- 内容部分: Redis的k-v/请求数据/响应数据/错误信息/步骤信息
什么时候需要加日志:#
- 所有的外部依赖(请求/Redis/MongoDB/文件IO等)
- 关键判断逻辑需要详细记录判定的依据, 次关键判断记录判定结果, 不关键的可以不加