Ubuntu Node.js日志清理技巧
导读:使用logrotate工具(系统级自动化管理) logrotate是Ubuntu系统自带的日志管理工具,可自动轮转、压缩、删除Node.js日志文件,无需修改应用代码。 安装logrotate:若未安装,通过终端执行sudo apt-ge...
使用logrotate工具(系统级自动化管理)
logrotate是Ubuntu系统自带的日志管理工具,可自动轮转、压缩、删除Node.js日志文件,无需修改应用代码。
- 安装logrotate:若未安装,通过终端执行
sudo apt-get install logrotate安装。 - 创建配置文件:在
/etc/logrotate.d/目录下新建Node.js专属配置文件(如nodejs-app),添加以下内容(根据实际路径调整):/path/to/your/nodejs/app/logs/*.log { daily # 每天轮转一次 rotate 7 # 保留最近7天的日志 compress # 压缩旧日志(节省空间) missingok # 日志文件不存在时不报错 notifempty # 日志为空时不轮转 create 0640 root adm # 新日志文件权限及所有者 } - 手动触发测试:执行
sudo logrotate -f /etc/logrotate.d/nodejs-app强制轮转,验证配置是否生效。 - 自动化运行:logrotate默认通过
/etc/cron.daily/logrotate每日自动执行,无需额外配置。
编写自定义Shell脚本(灵活定制清理逻辑)
通过Shell脚本可灵活定义清理规则(如按修改时间、文件大小),适合需要特殊清理逻辑的场景。
- 基础脚本示例:创建
clean-nodejs-logs.sh,内容如下:#!/bin/bash LOG_DIR="/path/to/your/nodejs/app/logs" MAX_DAYS=7 # 保留最近7天的日志 find "$LOG_DIR" -type f -name "*.log" -mtime +$MAX_DAYS -exec rm -f { } \; # 删除超过MAX_DAYS天的.log文件 - 赋予执行权限:
sudo chmod +x /usr/local/bin/clean-nodejs-logs.sh。 - 设置定时任务:通过
crontab -e添加以下内容,实现每天凌晨1点自动清理:0 1 * * * /usr/local/bin/clean-nodejs-logs.sh
利用systemd定时任务(集成系统服务管理)
若Node.js应用通过systemd管理(如使用systemctl start node-app),可创建systemd定时任务实现日志清理。
- 创建清理脚本:同自定义Shell脚本步骤,创建
/usr/local/bin/clean-nodejs-logs.sh并赋予执行权限。 - 创建systemd服务文件:
sudo nano /etc/systemd/system/clean-nodejs-logs.service,内容如下:[Unit] Description=Clean Node.js logs older than 7 days [Service] ExecStart=/usr/local/bin/clean-nodejs-logs.sh - 创建systemd定时器文件:
sudo nano /etc/systemd/system/clean-nodejs-logs.timer,内容如下:[Unit] Description=Run clean-nodejs-logs daily [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target - 激活定时任务:执行
sudo systemctl daemon-reload、sudo systemctl enable clean-nodejs-logs.timer、sudo systemctl start clean-nodejs-logs.timer,定时任务将随系统启动自动运行。
使用Node.js第三方日志库(应用层集成轮转)
通过第三方日志库(如winston-daily-rotate-file)在应用层实现日志轮转,适合需要与应用深度集成的场景(如按日志级别分开轮转)。
- 安装库:
npm install winston-daily-rotate-file。 - 配置日志轮转:在应用代码中添加以下内容(以winston为例):
此配置会自动按天分割日志文件,压缩旧日志并保留14天,无需额外系统级配置。const winston = require('winston'); const DailyRotateFile = require('winston-daily-rotate-file'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new DailyRotateFile({ filename: '/path/to/your/nodejs/app/logs/app-%DATE%.log', // 日志文件名格式 datePattern: 'YYYY-MM-DD', // 按天分割 zippedArchive: true, // 压缩旧日志 maxSize: '20m', // 单个日志文件最大20MB maxFiles: '14d' // 保留最近14天的日志 } ) ] } ); logger.info('This log will be rotated daily and compressed.');
手动清理临时日志(快速释放空间)
若需立即释放磁盘空间,可通过手动命令删除指定目录下的日志文件(谨慎使用,避免误删正在使用的日志)。
- 进入日志目录:
cd /path/to/your/nodejs/app/logs。 - 删除所有.log文件:
rm -f *.log(强制删除所有.log文件)。 - 删除超过30天的日志:
find . -type f -name "*.log" -mtime +30 -exec rm -f { } \;(删除30天前的.log文件)。
手动清理后,建议后续配置自动清理策略,避免重复操作。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Node.js日志清理技巧
本文地址: https://pptw.com/jishu/737250.html
