温馨提示×

为什么nodejs没有日志

小樊
45
2026-09-23 20:46:05
栏目: 编程语言

“Node.js 没有日志”这个说法其实不太准确,更准确地说:Node.js 本身不会自动帮你写业务日志,它只提供了最基础的能力,日志有没有、怎么记,完全取决于你怎么写代码或用什么工具。

下面从几个常见原因给你说明一下为什么你“感觉 Node.js 没有日志”。


1. Node.js 本身不自带“日志系统”

Node.js 的核心非常精简,它只提供:

  • console.log()
  • console.error()
  • console.warn()

这些只是输出到终端,并不是“日志系统”。

✅ 示例:

console.log('server started');

但:

  • 不会自动按天拆分
  • 不会写入文件
  • 不会区分环境
  • 不会记录请求链路

所以看起来“没日志”。


2. 很多初学者只用 console,没配置日志库

新手项目常见写法:

app.get('/', (req, res) => {
  console.log('request');
  res.send('ok');
});

一旦:

  • 部署到服务器(PM2 / Docker)
  • 没有终端
  • 程序后台运行

你就“看不到日志”了。


3. 部署方式导致日志“消失”

常见情况:

  • 用 node app.js &
  • 用 Docker 但没挂载日志
  • 用 PM2 但没看 pm2 logs
  • 用 Nginx 反向代理,只看 Nginx 日志

✅ 正确方式(PM2):

pm2 logs

✅ Docker:

docker logs <container_id>

4. 没有使用专业日志库(这是关键)

Node.js 生态里日志库是标配,不是“可选”。

常用日志库

  • winston(最流行)
  • pino(性能最好)
  • log4js

示例(winston)

const winston = require('winston');

const logger = winston.createLogger({
  transports: [
    new winston.transports.File({ filename: 'app.log' }),
    new winston.transports.Console()
  ]
});

logger.info('server started');

5. 框架没开启日志中间件

如果你用:

  • Express
  • Koa
  • NestJS

但没加日志中间件,也不会有访问日志。

Express 示例

const morgan = require('morgan');
app.use(morgan('combined'));

6. 错误被“吞掉”了

常见问题:

try {
  // 出错
} catch (e) {
  // 啥也没做
}

或者:

process.on('uncaughtException', () => {});

这样你永远看不到错误日志。


总结一句话

Node.js 不是没有日志,而是“默认不帮你管日志”。

如果你想要“有日志”:

✅ 用 winston / pino
✅ 写文件 + 控制台
✅ 加 HTTP 日志中间件
✅ 正确查看 PM2 / Docker 日志

如果你愿意,可以告诉我:

  • 你用的是 Express / Koa / NestJS / 原生 Node
  • 是 本地还是服务器
  • 想记 接口日志 / 错误日志 / 业务日志

我可以直接帮你配一套完整日志方案。

0 踩