重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一般前端开发同学,对日志其实不太敏感,毕竟前端大多数情况下,不太关心日志。即使有,也可能调用一些第三方的统计,比如百度统计或者别的等。在 Node.js(下文中简称node) 推进过程中,也发现我们平常打日志太随意,该打的日志没有打,打的一些关键日志缺少必要上下文信息,导致在线上定位问题的时候很困难。
本文主要梳理了目前我们团队在nodejs开发中日志方面存在的问题,以及通过统一日志规范,希望达到什么样的效果。
问题
目标
实现方案
日志类型
参考一些日志的最佳实践,目前将node日志分为如下几种类型(scope):
日志级别
只使用 FATAL、ERROR、WARN、INFO 和 DEBUG 等级。
日志格式/字段
日志基础数据
目前使用的 node-bunyan 日志库,官方文档,基础字段包含如下:
日志扩展数据
下面定义的各个数据类型的扩展数据,不是 全部的字段,仅包含该日志类型下,必需的字段。这些必需的扩展字段,需要在 ELK 中建立索引,方便定位各种问题。
{ ///////////// 基础数据 //////// v: 1, level: 20, ///////////// 扩展字段 //////// // 标志日志类型 scope: "visit", //事件类型:在 visit 的日志类型下,还会细分不同的事件,比如 client-req、client-res、 普通trace、请求后端service-start, service-end, service-err等。 event: "trace", //客户端ID,追踪用户、设备会话。在web端,可以是长期的cookie;在APP端,可以是device-id等 rrdid: "", //本次请求的惟一ID,串联本次请求的所有相关日志 req_id: "some-uuid-for-request", //本次请求的用户ID uid: "", //本次请求的客户端相关数据,通过 ctx.logger 打日志时,自动加上 d: { url: "/some/path?include-query", //客户端ip ip: "10.138.10.1", //客户端的 userAgent ua: "" }, //本次node请求的处理时间,毫秒 tm: 500, //该日志相关的上下文数据,尽量拼成一个字符串,放在 extra 里 extra: "", //ERROR 级别日志,最好包含error相关信息,比如请求后端相关参数等 err: { msg: "", stack: "" }, //调用后端服务相关参数和响应 service_req: { host: "", path: "", payload: "" }, service_res: { //http状态码 http_code: 200, //响应时间 tm: 100, //响应的body body: "", //异常信息 err: "" } }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。