温馨提示×

怎么导出Nodejs运行日志

小樊
37
2026-07-18 20:16:53
栏目: 编程语言

在 Node.js 中导出运行日志通常有几种常见方式,取决于你是本地运行还是线上部署,以及你使用的是什么日志方案。下面按场景给你一个完整的参考。


一、最简单:直接导出控制台日志(适合本地或临时查看)

1️⃣ 重定向标准输出(最常见)

node app.js > logs/app.log 2>&1

说明:

  • >:标准输出重定向
  • 2>&1:错误输出也一起写入
  • logs/app.log:日志文件

✅ 适合:本地调试、简单项目


2️⃣ 同时保留控制台输出(tee)

node app.js 2>&1 | tee logs/app.log

二、项目中主动写日志文件(推荐)

使用 fs 手动写日志(不推荐长期使用)

const fs = require('fs');
const logStream = fs.createWriteStream('logs/app.log', { flags: 'a' });

console.log = (msg) => {
  logStream.write(`[LOG] ${msg}\n`);
};

console.error = (msg) => {
  logStream.write(`[ERROR] ${msg}\n`);
};

⚠️ 不推荐:影响 console 行为,维护成本高


三、使用专业日志库(✅ 强烈推荐)

1️⃣ Winston(最常用)

安装

npm install winston

示例配置

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
    new winston.transports.File({ filename: 'logs/combined.log' })
  ]
});

// 开发环境可同时输出到控制台
if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console());
}

logger.info('服务启动成功');
logger.error('发生错误');

✅ 优点:

  • 自动按级别记录
  • 可同时输出到文件 + 控制台
  • 可接日志平台(ELK、Loki)

2️⃣ Pino(性能更好)

npm install pino pino-pretty
const pino = require('pino');
const logger = pino({
  transport: {
    target: 'pino-pretty',
    options: { destination: 'logs/app.log' }
  }
});

logger.info('服务启动');

✅ 适合:高并发、性能敏感项目


四、PM2 部署时导出日志(✅ 生产环境常用)

使用 PM2 启动

pm2 start app.js --name my-app

查看日志

pm2 logs my-app

日志路径

~/.pm2/logs/

自定义日志路径

pm2 start app.js --log logs/app.log

✅ 优点:

  • 自动管理日志
  • 支持日志分割(pm2-logrotate)

五、Docker 环境

1️⃣ 输出到 stdout(推荐)

logger.add(new winston.transports.Console());

Docker 会自动收集:

docker logs 容器名

2️⃣ 挂载日志目录

docker run -v $(pwd)/logs:/app/logs app

六、日志最佳实践 ✅

✅ 不要只 console.log
✅ 生产环境一定写文件或发送到日志系统
✅ 区分 info / warn / error
✅ 按日期切割日志(Winston + Daily Rotate)


七、按你的实际情况推荐

场景 推荐方案
本地调试 node app.js > app.log
小项目 Winston
高并发 Pino
生产环境 PM2 + Winston
云服务器 PM2 / Docker + 日志平台

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

  • ✅ 本地还是服务器?
  • ✅ 是否使用 PM2 / Docker?
  • ✅ 日志要导出到哪里?(文件 / 平台)

我可以直接帮你写一套可用的日志配置方案

0