如何在Debian服务器上设置Node.js日志轮转
Node.js 应用在 Debian 服务器上运行时,如果不做日志管理,app.log 会无限增长,最终占满磁盘。解决方案就是配置 日志轮转(log rotation)。下面我给你一个完整的 Debian 下 Node.js 日志轮转设置指南。
一、为什么要做日志轮转
1. 避免磁盘爆满:Node.js 应用长时间运行时,日志可能几十 GB。
2. 方便运维排查:旧日志按日期归档,新日志保持清晰。
3. 提升性能:避免单个日志文件过大导致 tail、grep 慢。
二、常见的日志轮转方案
在 Debian 中,有两种主流方式:
logrotate(推荐):Linux 内置工具,定时执行,规则灵活。
PM2 内置日志管理:如果用 PM2 管理 Node.js 进程,可以直接用它的 pm2-logrotate 插件。
下面我分别讲解。
三、方法一:使用 logrotate 配置 Node.js 日志轮转
1. 确认日志存放路径
假设 Node.js 应用的日志文件在:
/var/www/myapp/logs/app.log
2. 安装 logrotate
Debian 默认有 logrotate,没有就装:
sudo apt-get update
sudo apt-get install logrotate -y
3. 创建配置文件
在 /etc/logrotate.d/ 下新建配置:
sudo nano /etc/logrotate.d/myapp
写入内容:
/var/www/myapp/logs/*.log {daily # 每日轮转rotate 7 # 保留7天的日志compress # 压缩旧日志delaycompress # 延迟一天再压缩,避免影响最新日志missingok # 忽略不存在的日志文件notifempty # 空日志文件不处理create 0640 www-data www-data # 新文件权限与属主postrotate# 通知 Node.js 应用重新打开日志# 适配 pm2 的情况可以用 pm2 reload logsendscript
}
4. 测试配置
sudo logrotate -d /etc/logrotate.d/myapp
5. 强制执行轮转(验证效果)
sudo logrotate -f /etc/logrotate.d/myapp
执行后,app.log 会被切割为:
app.log
app.log.1.gz
app.log.2.gz
...
四、方法二:使用 PM2 的日志轮转插件
如果你用 PM2 管理 Node.js 进程,可以直接用 pm2-logrotate 插件。
1. 安装插件
pm2 install pm2-logrotate
2. 查看默认配置
pm2 conf
3. 修改参数
比如设置每天轮转,最多保留 7 天:
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'
pm2 set pm2-logrotate:max_days 7
说明:
rotateInterval '0 0 * * *' → 每天凌晨轮转
max_days 7 → 保留 7 天旧日志
compress true → 压缩归档
4. 验证
观察日志目录(默认在 ~/.pm2/logs/),是否出现 .1, .2, .gz 文件。
总结:在 Debian 服务器上,给 Node.js 应用做日志轮转有两种最佳实践:
系统级 logrotate:适合任何 Node.js 部署方式。
PM2-logrotate 插件:更适合 PM2 管理的应用。
推荐你:
如果是生产环境 → 用 logrotate,稳定可靠;
如果是个人项目 + PM2 → 用 pm2-logrotate,简单方便。