温馨提示×

Debian下如何导出Nodejs日志

小樊
37
2026-08-11 23:02:51
栏目: 编程语言

Debian 下导出 Node.js 日志,常见做法取决于你 日志是如何产生的(stdout、文件、PM2、systemd 等)。下面按常见场景给你一个完整说明。


一、Node.js 直接输出日志(stdout / stderr)

1️⃣ 前台运行

node app.js > app.log 2>&1
  • > app.log:标准输出
  • 2>&1:错误也写入同一文件

✅ 适合临时测试


2️⃣ 后台运行

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

查看日志:

tail -f app.log

二、使用 PM2(最常见 ✅)

1️⃣ 查看日志

pm2 logs
pm2 logs app_name

2️⃣ 导出日志到文件

pm2 logs app_name --out out.log --err err.log

3️⃣ 日志路径(默认)

~/.pm2/logs/

4️⃣ 修改日志路径(ecosystem)

module.exports = {
  apps: [{
    name: "app",
    script: "app.js",
    out_file: "/var/log/node/app-out.log",
    error_file: "/var/log/node/app-err.log",
    merge_logs: true,
    log_date_format: "YYYY-MM-DD HH:mm:ss"
  }]
}

然后:

pm2 start ecosystem.config.js

三、systemd 管理 Node.js(推荐生产环境 ✅)

1️⃣ service 文件示例

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

[Service]
Type=simple
User=node
WorkingDirectory=/opt/app
ExecStart=/usr/bin/node index.js
StandardOutput=append:/var/log/node/app.log
StandardError=append:/var/log/node/error.log
Restart=always

[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

或:

tail -f /var/log/node/app.log

四、Node.js 内部写日志(winston / pino)

示例(winston)

const winston = require('winston');

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

logger.info('Hello Debian');

日志文件:

/var/log/node/app.log

五、从 journald 导出日志(systemd)

journalctl -u node-app > node-logs.txt

导出最近 100 行:

journalctl -u node-app -n 100 > node-logs.txt

六、日志导出最佳实践 ✅

场景 推荐方式
本地开发 stdout + 重定向
服务器 systemd / PM2
高频日志 winston + 按天切割
容器 stdout(Docker log)

七、常见问题

❓ 日志太大怎么办?

  • logrotate
  • winston 按日期切割
  • PM2 自带日志管理

❓ 权限问题

sudo mkdir /var/log/node
sudo chown node:node /var/log/node

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

  • ✅ 是否使用 PM2 / systemd / Docker
  • ✅ Node.js 版本
  • ✅ 日志是 console.log 还是 winston

我可以给你 最合适的一套配置方案

0