温馨提示×

debian nodejs日志过大怎么办

小樊
41
2026-09-04 02:46:25
栏目: 编程语言

在 Debian 上 Node.js 日志过大,通常可以从日志管理、应用配置、系统工具三个层面解决。下面给你一套实用方案。


一、先确认日志来源

先看看日志到底在哪、是谁写的:

# 常见位置
/var/log/
~/.pm2/logs/
/var/log/nginx/  # 如果前面有 nginx
项目目录下的 logs/

# 查看大文件
du -sh /var/log/*
find / -name "*.log" -size +100M

常见来源:

  • Node.js 应用自己写日志(winston / pino / console)
  • PM2 日志
  • systemd 服务日志(journalctl)
  • nginx / 反向代理日志

二、应用层解决(最根本)

1. 使用日志轮转(推荐)

如果是自己写文件日志,用 winston + winston-daily-rotate-file

const { createLogger, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

createLogger({
  transports: [
    new DailyRotateFile({
      filename: 'logs/app-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      maxSize: '20m',
      maxFiles: '14d'
    })
  ]
});

✅ 自动按天 / 大小切割
✅ 自动删除旧日志


2. 控制日志级别

生产环境不要开 debug:

logger.level = 'info'; // 不要 debug / verbose

三、使用 logrotate(Debian 标准方案)

1. 新建 logrotate 配置

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

示例:

/var/www/myapp/logs/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

2. 手动测试

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

✅ 适合 PM2 / 原生 Node 写文件日志


四、PM2 用户专属

限制 PM2 日志大小

pm2 start app.js --log-date-format "YYYY-MM-DD HH:mm" \
  --max-size 10M \
  --retain 7

或全局配置:

pm2 set pm2:max-size 10M
pm2 set pm2:retain 7

清理旧日志:

pm2 flush

五、systemd 日志过大(journalctl)

如果你用 systemd 启动 Node:

journalctl -u node-app

限制大小:

sudo nano /etc/systemd/journald.conf
SystemMaxUse=200M
SystemKeepFree=100M
MaxFileSec=7day

生效:

sudo systemctl restart systemd-journald

清理:

sudo journalctl --vacuum-size=100M

六、临时应急(立刻腾空间)

# 清空大日志(不删文件)
: > /var/www/myapp/logs/app.log

# 或
truncate -s 0 app.log

⚠️ 不要直接 rm,可能导致进程写错文件


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

✅ Node + winston-daily-rotate-file
✅ + logrotate 兜底
✅ + journalctl 限额
✅ + 生产环境 info 级别


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

  • 你是怎么运行 Node(PM2 / systemd / docker)
  • 日志是写文件还是 stdout

我可以直接给你可复制的配置

0