温馨提示×

怎样导出nodejs错误日志

小樊
33
2026-09-23 20:49:04
栏目: 编程语言

在 Node.js 中“导出错误日志”通常有以下几种常见方式,从最简单到生产级方案给你梳理一下。


一、直接重定向标准错误(最简单)

Node.js 的报错默认输出到 stderr

node app.js 2> error.log
  • 2>:只导出错误
  • 追加方式:
node app.js 2>> error.log

✅ 适合:本地调试、临时使用


二、在代码中捕获并写文件(常用)

1️⃣ 捕获未处理异常

process.on('uncaughtException', (err) => {
  require('fs').appendFileSync(
    'error.log',
    `${new Date().toISOString()} ${err.stack}\n`
  );
  process.exit(1);
});

process.on('unhandledRejection', (reason) => {
  require('fs').appendFileSync(
    'error.log',
    `${new Date().toISOString()} UnhandledRejection: ${reason}\n`
  );
});

2️⃣ 使用 try-catch + 写日志

try {
  // 业务逻辑
} catch (err) {
  fs.appendFileSync('error.log', err.stack);
}

三、使用日志库(推荐)

✅ 使用 winston(最流行)

npm install winston
const winston = require('winston');

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

try {
  throw new Error('出错了');
} catch (err) {
  logger.error(err.stack);
}

✅ 支持:

  • 文件分割
  • 多文件(info / error)
  • 日志级别

四、使用 console.error + 重定向(轻量)

console.error('出错了', err);
node app.js 2> error.log

五、Docker / 生产环境(最佳实践)

Docker

docker logs container_name > error.log 2>&1

PM2

pm2 logs --err > error.log

六、推荐方案总结

场景 推荐方式
本地调试 2> error.log
小项目 fs.appendFile
生产项目 winston / pino
容器环境 stdout/stderr + 日志采集

如果你愿意,我可以:

  • 给你一个完整错误日志模板
  • 按 Express / Koa / NestJS 场景写
  • 帮你接 ELK / Loki / Sentry

你现在的 Node 项目是哪种?

0 踩