温馨提示×

debian nodejs日志怎么归档

小樊
44
2026-09-16 09:20:58
栏目: 编程语言

在 Debian 上,Node.js 本身的日志归档通常不是 Node.js 自己做的,而是由系统日志机制 + 日志轮转工具来完成。下面按常见场景给你一套实用方案。


一、最常见做法:用 logrotate(推荐)

Debian 自带 logrotate,非常适合 Node.js 日志归档。

1. 假设你的 Node.js 日志位置

例如:

/var/log/node/app.log

2. 创建 logrotate 配置

sudo nano /etc/logrotate.d/node-app

示例配置:

/var/log/node/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

参数说明

  • daily:每天轮转
  • rotate 14:保留 14 天
  • compress:压缩旧日志
  • copytruncate:不重启 Node.js 也能继续写日志(非常适合 Node

3. 手动测试

sudo logrotate -d /etc/logrotate.d/node-app
sudo logrotate -f /etc/logrotate.d/node-app

二、Node.js 用 PM2(非常常见)

如果你用 PM2 管理 Node.js:

PM2 自带日志

~/.pm2/logs/app-out.log
~/.pm2/logs/app-error.log

用 PM2 + logrotate

PM2 官方提供配置:

pm2 logrotate

或手动:

sudo nano /etc/logrotate.d/pm2
/home/*/.pm2/logs/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    copytruncate
}

三、Node.js 直接写日志(不依赖系统)

如果你是自己在代码里写日志(如 winstonpino):

推荐组合

  • winston + winston-daily-rotate-file

示例:

const winston = require('winston');
require('winston-daily-rotate-file');

const transport = new winston.transports.DailyRotateFile({
  dirname: '/var/log/node',
  filename: 'app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d',
  zippedArchive: true
});

这样日志自动按天归档 + 压缩,不用 logrotate。


四、systemd 方式(如果你用 systemd 启动 Node)

Debian 上 Node 用 systemd 启动时:

journalctl -u node-app

归档由 systemd-journald 管理:

sudo nano /etc/systemd/journald.conf
Storage=persistent
SystemMaxUse=500M
MaxRetentionSec=2week

然后:

sudo systemctl restart systemd-journald

五、总结建议

场景 推荐方案
普通 Node 服务 logrotate + copytruncate
PM2 pm2 logrotate
自己写日志 winston-daily-rotate-file
systemd 启动 journalctl

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

  • Node 是怎么启动的(pm2 / systemd / 直接 node)
  • 日志写到哪
  • 想要保留多久

我可以给你一份可直接用的配置

0