Node.js应用在Ubuntu上如何处理日志轮转
在Ubuntu上,使用系统自带的logrotate工具处理Node.js应用日志轮转最为省心。需在/etc/logrotate.d/下创建配置文件,设置每日轮转、保留7份、压缩及权限等参数,通过logrotate-d验证后由cron自动执行。若已使用PM2等进程管理工具,需注意协调日志轮转策略,避免冲突。
日志管理这事儿,说大不大,说小不小,但出问题的时候是真头疼。在Ubuntu上处理Node.js应用的日志轮转,最省心的方案还是logrotate——这个系统自带的日志管理工具,用好了能省下不少运维的精力。

第一步,确认logrotate是否已经就位。在Ubuntu上,它通常是预装的,但我们可以通过以下命令快速检查,顺手安装一下也不费事:
sudo apt-get update
sudo apt-get install logrotate
接下来,需要为Node.js应用创建一个专属的日志轮转配置文件。在/etc/logrotate.d/目录下新建一个文件,比如就叫nodejs:
sudo nano /etc/logrotate.d/nodejs
假设应用的日志文件位于/var/log/nodejs/app.log,那么配置文件可以这样写:
/var/log/nodejs/*.log {
daily
rotating 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
}
这里的逻辑很直观:
- daily:每天轮转一次,适合日志量适中的场景。
- rotating 7:保留最近7个轮转后的日志文件,相当于保留一周的日志记录。
- compress:轮转后的旧日志会被压缩,节省磁盘空间。
- delaycompress:这个选项比较贴心——它不会立即压缩刚轮转出来的日志,而是等到下一次轮转时再压缩。这样如果你需要查看前一天的日志,还能直接打开看,不用先解压。
- missingok:日志文件偶尔会丢失,这不会导致报错中断。
- notifempty:如果日志文件是空的,就不执行轮转,避免生成无意义的空文件。
- create 0640 root adm:轮转后自动创建新的空日志文件,权限设置为0640,属主root,属组adm,既安全又不影响应用写入。
保存退出后,建议先验证一下配置是否正确:
sudo logrotate -f /etc/logrotate.d/nodejs
如果输出类似“reading config file /etc/logrotate.d/nodejs”这样的信息,说明配置没问题。这时就可以放心地把轮转任务交给系统了——logrotate默认通过cron定时任务触发,通常每天凌晨会自动执行。
需要说明的是,如果你的Node.js应用本身已经使用了像PM2、winston这类自带日志管理功能的工具,那它们的轮转策略可能和系统级方案有所重叠。这种情况下,最好先看看工具文档,确认是以应用层的配置为准,还是两者可以协同工作。要我说,能用系统工具搞定的事情,就别再额外折腾第三方的轮转方案了——省心,也省资源。


































