你的浏览器无法正常显示内容,请更换或升级浏览器!

NodeJS 日志方案选型实践:从 console 到结构化日志

tenfei
tenfei
发布于2026-09-22 19:30 阅读13次
NodeJS 日志方案选型实践:从 console 到结构化日志
线上出问题时才发现,项目里只有零散的 console.log,什么线索都捞不到。这篇结合真实项目讲清 NodeJS 日志方案的演进路径:console 的局限、为什么选结构化 JSON 日志、日志级别怎么定、文件轮转如何做,以及在容器环境下的特殊处理,帮你把日志从摆设变成排查利器。
# 一、console.log 的三个问题 开发阶段用 console.log 没问题,但**上生产就是灾难**: 1. **没有级别**——无法按严重程度过滤; 2. **没有上下文**——不知道是哪个请求、哪个环节打的; 3. **同步写终端**——量大时拖慢事件循环。 等问题发生后想回溯,才发现什么都没留下。 # 二、选结构化日志 把日志打成 **JSON 格式**,每条都是一个对象:时间、级别、消息、请求 ID、耗时等字段齐全。好处是机器可解析,后续接日志平台、按字段检索都方便。 主流选择有两个:一个以性能见长,一个 API 对 console 友好。选哪个都行,**关键是全员统一用一个**,别又混进 console.log。 # 三、日志级别怎么定 - **error**:影响功能的异常,必须处理并告警; - **warn**:异常但可自动恢复,需要关注趋势; - **info**:关键业务动作,如请求进出、定时任务开始结束; - **debug**:开发排查用的细节,生产环境默认关闭。 生产环境一般开 info 级别。级别不是越全越好,**全开 debug 会把真正的问题淹没**。 # 四、文件轮转必须做 单文件日志迟早把磁盘写爆。用轮转工具按**大小或日期**切割,并设置保留份数。配置要点: - 按天切割,保留 14 天左右; - 单文件超限也切,防止某天日志暴涨; - 切割后压缩归档,节省空间。 # 五、容器环境的特殊处理 容器里有个反直觉的最佳实践:**日志直接输出到标准输出**,不写文件。由容器运行时统一收集、转发到日志平台。这样做的好处是: 1. 不用管容器内磁盘和轮转; 2. 日志随容器生命周期自动管理; 3. 多实例日志可以按服务聚合检索。 本地开发和容器部署**用同一个日志库**,只是输出目标不同——本地写文件方便看,容器走标准输出交给平台。 # 六、请求链路追踪 结构化日志最大的价值是**串起一次请求的完整链路**。做法:入口生成唯一请求 ID,中间所有日志都带上这个字段。排查问题时按 ID 一搜,整条链路的日志按顺序排列,比翻十倍量的散日志高效太多。 # 七、避坑清单 1. **别在热路径打太多 info**,高频接口每个请求打几条,量会失控; 2. **敏感信息脱敏**,密码、手机号不要原样进日志; 3. **异常要打完整堆栈**,只打 message 定位不了问题; 4. **日志配置纳入代码管理**,级别和格式改动要有记录; 5. **定期演练**,按一次真实故障走一遍检索流程,验证日志真的够用。 # 八、小结 日志系统的价值在故障时刻才体现。平时多花半天把结构化日志和链路追踪搭好,出事时能省下几天的排查时间,这笔账怎么算都划算。

1

0

文章点评
Copyright © from 2021 by namoer.com
458815@qq.com QQ:458815
蜀ICP备2022020274号-2