温馨提示×

linux nodejs日志过大怎么清

小樊
36
2026-10-17 05:34:24
栏目: 编程语言

在 Linux 上 Node.js 日志过大,常见处理方式和最佳实践如下:


一、临时清理(不推荐直接删运行中的日志)

1. 查看日志文件

du -sh /path/to/logs/*
ls -lh /path/to/logs

2. 清空日志(不删除文件,避免进程报错)

# 推荐:清空而不删除
: > /path/to/app.log

# 或
truncate -s 0 /path/to/app.log

⚠️ 不要直接 rm 正在写入的日志文件,否则:

  • 磁盘空间不会释放
  • Node 进程仍持有文件句柄

二、使用 logrotate(推荐)

1. 安装

# CentOS
yum install logrotate

# Ubuntu / Debian
apt install logrotate

2. 配置示例

sudo vim /etc/logrotate.d/node-app
/path/to/logs/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

说明:

  • copytruncate:复制后清空,适合 Node 不重启的场景
  • rotate 7:保留 7 份
  • compress:gzip 压缩

3. 手动测试

logrotate -d /etc/logrotate.d/node-app  # 模拟
logrotate -f /etc/logrotate.d/node-app  # 强制执行

三、Node.js 项目内处理(根本解决)

1. 使用日志库(推荐)

  • 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',
  maxFiles: '14d',
  maxSize: '20m'
});

2. 控制日志级别

logger.level = 'info'; // 不要 debug / silly 上生产

四、Docker 场景

1. 限制日志大小

logging:
  driver: "json-file"
  options:
    max-size: "50m"
    max-file: "3"

2. 清理 Docker 日志

docker system prune

五、排查是否“假清理”

lsof | grep deleted

如果有 Node 进程占用 deleted 日志:

# 重启 Node 服务
pm2 restart all
# 或
systemctl restart your-node-service

总结建议

✅ 生产环境:logrotate + winston/pino
✅ 临时处理:: > logfile
❌ 不要 rm 正在写的日志

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

  • 日志是 pm2 / 原生 node / Docker?
  • 日志路径和大小?

我可以给你更精确的配置。

0 踩