nodejs 日志规范
一般前端开发同学,对日志其实不太敏感,毕竟前端大多数情况下,不太关心日志。即使有,也可能调用一些第三方的统计,比如百度统计或者别的等。在 Node.js
(下文中简称node
) 推进过程中,也发现我们平常打日志太随意,该打的日志没有打,打的一些关键日志缺少必要上下文信息,导致在线上定位问题的时候很困难。
本文主要梳理了目前我们团队在nodejs开发中日志方面存在的问题,以及通过统一日志规范,希望达到什么样的效果。
问题
- node日志不规范,打日志太随意
- 没有良好的日志格式、约定的字段,在
ELK
里不能很好的解析&检索 (PS:ELK
文章在路上) - 由于node对接的后端服务化,调用链不清晰,定位问题困难
- 数据部门对node日志的使用,没有明确的记录。node修改了日志,导致统计数据异常
目标
- 规范日志打印字段&格式,便于
ELK
检索 - 增强node上下游(nginx/后端)日志格式,加入惟一
requestId
,方便微服务下定位问题 - 统计应用运行情况,性能数据
- 维护数据部门对node日志的使用情况
实现方案
日志类型
参考一些日志的最佳实践,目前将node日志分为如下几种类型(scope
):
desc
: 系统启动、运行过程中,打的日志,表明系统的一些启动日志、启动参数等,也包含在 不能 捕获到http上下文的时候,打的日志stat
: 系统性能统计日志,应用会定时收集一些性能信息,便于查询应用当前状态visit
: 每个http请求相关的日志,会包含惟一的 requestId,定位该请求相关的所有日志biz
: 业务数据相关日志,主要提