Node.js 把日志存在哪里?

Node.js 本身不写日志文件,console.log 输出到 stdout、错误到 stderr;可用 shell 重定向落盘,或用 Winston/Pino 等日志库管理,生产建议输出到 stdout 由采集器接管。

最佳实践
Node.js 把日志存在哪里?封面

直接答案:Node.js 自己不在任何文件里存日志**——console.log 打印到标准输出(stdout),console.error 打印到标准错误(stderr),进程一关就没了。想落盘,要么用 shell 重定向,要么在代码里接入日志库,要么交给进程管理器。**

方式一:启动时重定向(最简)

node my_app.js > my_app_log.log 2> my_app_err.log

stdout 进 my_app_log.log,stderr 进 my_app_err.log。缺点:没有轮转、没有时间格式控制,只适合临时用。

方式二:进程管理器(中小规模推荐)

用 PM2 托管进程,日志自动落盘并支持轮转:

pm2 start my_app.js
pm2 logs            # 实时查看
ls ~/.pm2/logs/     # 日志文件位置

systemd 托管的话,输出默认进 journal:journalctl -u my-node-app -f

方式三:日志库(生产推荐)

Winston、Pino、Log4js 等库支持分级、JSON 结构化、多输出目标:

const pino = require('pino');
const logger = pino();  // 默认 JSON 输出到 stdout

logger.info({ userId: 42 }, 'user login');
logger.error({ err }, 'request failed');

容器环境的最佳实践是输出 JSON 到 stdout,不写文件——由容器运行时和采集器接管,应用保持无状态。

观测云对照

Node.js 日志接入观测云。 容器部署时 DataKit 按容器采集 stdout 日志,JSON 结构自动解析成字段;配合 APM 探针还能把日志与 Trace 关联,从一条报错日志直接跳到完整调用链。

常见问题(FAQ)

Q:console.log 对性能有影响吗?
A:有。同步写 stdout 在高并发下是瓶颈,生产环境用 Pino 这类异步高性能日志库。

Q:线上排查想临时看日志怎么办?
A:PM2 用 pm2 logs;systemd 用 journalctl -u 服务名 -f;容器用 docker logs -fkubectl logs -f

Q:需要按天分文件怎么办?
A:PM2 装 pm2-logrotate 模块;日志库方案用 pino-roll 或 Winston 的 daily-rotate-file transport。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台