温馨提示×

nodejs linux日志过大如何解决

小樊
41
2026-09-08 13:53:29
栏目: 编程语言

在 Linux 下 Node.js 日志过大,通常可以从日志生成控制、日志轮转、日志清理、存储与监控几个方面解决。下面按实用程度给你一套方案。


一、先确认日志来源(很重要)

常见日志过大的原因:

  • console.log / console.error 输出太多
  • 未捕获异常被写入日志
  • 框架日志(如 Express、Nest、Koa)级别太低
  • 直接写文件没有轮转(log rotate)
  • 第三方库日志过多

先看日志在哪:

du -sh /var/log/*
du -sh ~/your-project/logs/*

二、使用日志轮转(最推荐,立刻见效)

1️⃣ 使用 logrotate(Linux 原生)

适合直接写文件的 Node 日志。

示例配置 /etc/logrotate.d/node-app

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

说明:

  • daily:每天切
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:不重启 Node 也能切日志(很重要)

应用后测试:

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

三、Node 层使用专业日志库(根本解决)

推荐日志库

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

示例(winston + 文件轮转)

npm install winston winston-daily-rotate-file
const winston = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');

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

✅ 自动按大小 / 时间切分
✅ 自动删除旧日志


四、减少日志量(从源头控制)

1️⃣ 控制日志级别

生产环境:

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

2️⃣ 避免打印大对象

❌ 错误示例:

console.log(req);

✅ 正确:

logger.info({
  url: req.url,
  method: req.method
});

3️⃣ 捕获未处理异常

process.on('uncaughtException', e => {
  logger.error('uncaught', e);
  process.exit(1);
});

process.on('unhandledRejection', e => {
  logger.error('unhandledRejection', e);
});

五、使用 systemd(如果你用)

如果你用 systemd 启动 Node:

[Service]
StandardOutput=journal
StandardError=journal

然后用:

journalctl -u node-app --disk-usage
journalctl --vacuum-size=100M

六、实时清理 & 监控(兜底)

查找大日志

find / -name "*.log" -size +100M

定时清理(crontab)

0 3 * * * find /var/log/node-app -name "*.log" -mtime +7 -delete

七、推荐的“最佳实践组合”

✅ Node 用 pino / winston
✅ 文件用 daily-rotate
✅ Linux 用 logrotate
✅ 生产环境 info 级别
✅ 监控磁盘 & 日志大小


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

  • 你用的是 Express / Nest / Koa / 原生 Node
  • 日志是 console 还是写文件
  • 是否在 Docker / PM2 / systemd

我可以给你一套完全适配你项目的配置

0