温馨提示×

nodejs日志过大ubuntu怎么办

小樊
47
2026-10-03 13:44:47
栏目: 编程语言

在 Ubuntu 上 Node.js 日志过大,通常可以从应用层、运行方式、系统层三个方向来解决。下面按常见场景给你一套实用方案。


一、应用层(最根本)

1. 使用成熟日志库(不要直接 console.log)

推荐:

  • winston
  • pino(性能最好)
  • bunyan

示例(winston + 按大小轮转):

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

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

✅ 好处:自动按天 / 大小切割,不会一个文件无限涨


2. 控制日志级别

生产环境不要开 debug

logger.level = process.env.NODE_ENV === 'production' ? 'info' : 'debug';

二、运行方式(PM2 用户最常见)

3. PM2 日志轮转(非常推荐)

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true

✅ 自动切割 + 压缩 + 保留 N 天

查看日志位置:

pm2 logs
pm2 info <app>

三、系统层(通用方案)

4. logrotate(Ubuntu 自带)

适合任何 Node 服务

创建配置文件:

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

示例:

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

测试:

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

⚠️ copytruncate 对 Node 很关键,避免文件句柄问题


5. 定时清理旧日志

find /var/www/app/logs -name "*.log" -mtime +7 -delete

加进 crontab:

0 3 * * * find /path/logs -name "*.log" -mtime +7 -delete

四、紧急情况(日志已经爆了)

查看哪个文件大

du -sh /var/log/*
du -sh ~/app/logs/*

临时清空(不删文件)

truncate -s 0 app.log

五、推荐组合(省心方案)

✅ Node + PM2 + pm2-logrotate
或
✅ Node + winston + 系统 logrotate


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

  • 用没用 PM2 / Docker / systemd
  • 日志路径在哪
  • 是 access log 还是 error log 太大

我可以直接帮你写一份可用配置。

0 踩