温馨提示×

Linux Nodejs日志如何导出

小樊
44
2026-08-29 00:39:20
栏目: 编程语言

在 Linux 上导出 Node.js 日志,常见做法取决于日志是写到哪里的。下面按最常见的几种场景给你一个完整、可操作的方案。


一、Node.js 日志常见形式

✅ 1. 控制台输出(最常见)

即代码中使用:

console.log()
console.error()

在 Linux 中,这些输出通常是:

  • 标准输出 stdout
  • 标准错误 stderr

二、直接导出运行中的日志

✅ 方法 1:重定向输出到文件(推荐)

启动 Node.js 时:

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

说明:

  • > app.log:stdout 输出到文件
  • 2>&1:stderr 也写入同一文件

后台运行:

nohup node app.js > app.log 2>&1 &

日志文件:

app.log

✅ 方法 2:分别导出 stdout / stderr

node app.js > stdout.log 2> stderr.log

三、已运行中的 Node.js 进程如何导出日志

❌ 不能直接「导出」

Node.js 不像 Java 可以动态切日志文件。

✅ 正确做法

1️⃣ 用 pm2(强烈推荐)

安装:

npm install -g pm2

启动:

pm2 start app.js --name my-app

查看日志:

pm2 logs my-app

导出日志:

pm2 logs my-app > app.log

日志文件路径:

~/.pm2/logs/

✅ 方法 3:通过 lsof 找到日志文件(如果已写文件)

lsof -p <pid> | grep log

示例输出:

node  12345 user  3w  REG  /home/user/app.log

然后直接拷贝:

cp /home/user/app.log app_backup.log

四、使用日志库(最佳实践)

✅ 使用 winston 示例

const winston = require('winston');

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

logger.info('hello world');

导出的日志文件:

combined.log
error.log

五、Docker 场景(如果你在用)

docker logs <container_id> > app.log 2>&1

六、实时查看 & 导出日志

实时查看:

tail -f app.log

导出最后 1000 行:

tail -n 1000 app.log > app_last_1000.log

七、总结(快速选择)

场景 推荐方式
新项目 pm2
临时导出 node app.js > app.log 2>&1
已运行 pm2 logs
生产环境 winston + pm2
Docker docker logs

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

  • ✅ 是否使用 pm2
  • ✅ 是否 Docker
  • ✅ 日志目前是 console.log 还是文件
  • ✅ 想导出一天的还是全部的

我可以给你精确到命令的定制方案

0