温馨提示×

Ubuntu Nodejs日志怎么导出

小樊
42
2026-08-20 11:53:32
栏目: 编程语言

在 Ubuntu 上导出 Node.js 日志,常见做法取决于你日志是怎么生成的。下面按常见场景给你一套完整方案,从简单到规范。


一、Node.js 直接输出日志(最常见)

1️⃣ 默认情况(console.log)

Node.js 默认日志输出到:

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

前台运行

node app.js

日志直接显示在终端。

导出到文件

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

说明:

  • >:标准输出
  • 2>&1:错误也写入同一文件

✅ 文件 app.log 就是导出的日志


二、后台运行并导出日志(推荐)

使用 nohup

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

查看日志:

tail -f app.log

三、使用 PM2(生产环境强烈推荐 ✅)

1️⃣ 安装 PM2

npm install -g pm2

2️⃣ 启动项目

pm2 start app.js --name my-app

3️⃣ 查看日志

pm2 logs my-app
pm2 logs my-app --lines 100

4️⃣ 导出日志文件

PM2 默认日志位置:

~/.pm2/logs/

例如:

my-app-out.log
my-app-error.log

5️⃣ 导出到指定目录

pm2 start app.js --name my-app \
  --log /var/log/my-app.log \
  --error /var/log/my-app-error.log \
  --output /var/log/my-app-out.log

四、使用 systemd(服务器标准方式 ✅)

1️⃣ 创建服务文件

sudo vim /etc/systemd/system/node-app.service

内容示例:

[Unit]
Description=Node.js App
After=network.target

[Service]
ExecStart=/usr/bin/node /home/ubuntu/app/app.js
WorkingDirectory=/home/ubuntu/app
Restart=always
StandardOutput=append:/var/log/node-app.log
StandardError=append:/var/log/node-app-error.log

[Install]
WantedBy=multi-user.target

2️⃣ 启动服务

sudo systemctl daemon-reload
sudo systemctl start node-app
sudo systemctl enable node-app

3️⃣ 查看日志

journalctl -u node-app -f

或:

cat /var/log/node-app.log

五、Node.js 代码中写日志(更可控)

示例:写入文件

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

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

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

六、Docker 场景(补充)

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

七、推荐组合(最佳实践 ✅)

场景 推荐方案
本地调试 console.log
后台运行 nohup
生产环境 PM2
系统级服务 systemd
长期日志 日志文件 + 日志切割

八、日志切割(防止爆盘)

sudo apt install logrotate

示例:

/var/log/node-app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

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

  • ✅ 你是 本地 / 云服务器
  • ✅ 是否使用 PM2 / Docker
  • ✅ 日志是 console 还是 winston / pino

我可以给你一个完全贴合你项目的导出方案

0