温馨提示×

怎样清理nodejs linux日志

小樊
43
2026-09-08 13:51:25
栏目: 编程语言

在 Linux 上清理 Node.js 日志,要根据日志是怎么产生的来处理。下面按常见情况说明做法。


一、先确认日志在哪里

1. 应用自己写的日志

常见位置:

  • 项目目录下的 logs/
  • /var/log/你的项目名/
  • 用户目录 ~/logs

查看:

ls -lh logs/
du -sh logs/*

2. PM2 管理的 Node.js

PM2 默认日志在:

~/.pm2/logs/

查看:

pm2 logs --lines 0
ls -lh ~/.pm2/logs

3. 系统服务(systemd)

如果是用 systemctl 启动的:

journalctl -u your-node-service

二、清理方式(推荐顺序)

✅ 方式 1:日志轮转(最推荐)

不要直接删日志文件,用 logrotate

示例(/etc/logrotate.d/node-app):

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

测试:

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

✅ 方式 2:PM2 日志清理

pm2 flush

或只清某个服务:

pm2 flush app-name

✅ 方式 3:手动清空(不影响进程)

不要 rm 正在写的日志,用:

> logs/app.log

truncate -s 0 logs/app.log

✅ 方式 4:删除旧日志(确认无用的)

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

三、Node.js 代码层面建议

使用日志库(自带轮转)

推荐:

  • winston
  • pino

示例(winston + 每天切分):

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

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

四、不推荐的做法 ❌

rm -f logs/app.log   # 正在写入会丢日志或报错

会导致:

  • 文件句柄失效
  • 日志停止写入
  • 磁盘空间不释放

五、快速排查磁盘

df -h
du -sh /var/log/*
lsof | grep deleted

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

  • ✅ 用 PM2 还是 systemd?
  • ✅ 日志是 console 还是写文件?
  • ✅ Linux 发行版(CentOS / Ubuntu)

我可以给你精确到命令的配置方案

0