温馨提示×

debian nodejs日志太大怎处理

小樊
36
2026-09-16 09:17:59
栏目: 编程语言

在 Debian 上 Node.js 日志太大,一般可以从 日志轮转、应用层控制、系统级清理、运维手段 几个方面处理。下面按实用程度给你一套方案。


一、最常见 & 推荐:用 logrotate(系统级)

如果你的日志是直接写到文件(如 app.log),首选 logrotate

1. 创建 logrotate 配置

sudo nano /etc/logrotate.d/nodejs

示例(假设日志在 /var/log/nodejs/):

/var/log/nodejs/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    copytruncate
}

说明:

  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:不重启 Node 也能截断日志(常用)

2. 手动测试

sudo logrotate -d /etc/logrotate.d/nodejs  # 模拟
sudo logrotate -f /etc/logrotate.d/nodejs  # 强制

二、Node.js 应用层处理(根本解决)

1. 使用日志库(强烈推荐)

不要 console.log 写文件。

使用 winston + 轮转

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

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

const logger = winston.createLogger({
  transports: [transport]
});

✅ 自动按天 / 大小切割
✅ 不用手动清理


三、如果是 PM2 启动的 Node

PM2 自带日志管理:

pm2 logs
pm2 flush        # 清空日志

限制日志大小

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

或:

pm2 set pm2:log:max-size 10M

四、Docker 场景(如果用容器)

限制 Docker 日志

/etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

重启 Docker:

sudo systemctl restart docker

五、临时清理(应急)

# 查看大日志
du -sh /var/log/nodejs/*

# 清空(不删文件)
: > /var/log/nodejs/app.log

或:

find /var/log/nodejs -name "*.log" -mtime +7 -delete

六、排查“为什么这么大”

常见原因:

  • 生产环境还开 debug
  • 错误被无限重试
  • 第三方库疯狂打日志
  • 请求体 / token 被打印

✅ 建议:

  • 生产只打 info / warn / error
  • 不打印敏感信息

总结推荐方案

场景 推荐
直接文件日志 logrotate
Node 应用 winston / pino
PM2 pm2 log 限制
Docker docker log opts

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

  • 日志路径
  • 怎么启动 Node(pm2 / docker / systemd)
  • 是否已有日志库

我可以直接帮你写配置。

0