Ubuntu Node.js日志清理策略有哪些
导读:Ubuntu Node.js 日志清理策略 一 系统级策略 使用 logrotate 对应用日志进行按日/按大小轮转、压缩与保留,适合绝大多数场景。示例配置(/etc/logrotate.d/nodejs):/path/to/your/n...
Ubuntu Node.js 日志清理策略
一 系统级策略
- 使用 logrotate 对应用日志进行按日/按大小轮转、压缩与保留,适合绝大多数场景。示例配置(/etc/logrotate.d/nodejs):
要点:/path/to/your/nodejs/app/logs/*.log { daily rotate 7 compress missingok notifempty create 0640 your_user your_group }- daily/rotate 7/compress:每天轮转、保留最近 7 天、旧日志压缩。
- missingok/notifempty:日志缺失不报错、空文件不轮转。
- create 0640 your_user your_group:轮转后重建文件并设定权限与属主,务必使用运行应用的 实际用户/组,避免权限错误。
- 测试与生效:
sudo logrotate -f /etc/logrotate.d/nodejs;通常系统每日由 cron 自动调用 logrotate,无需额外操作。
- 若服务由 systemd 托管,清理系统日志(journald)避免与业务日志混淆:
建议仅清理系统级 journal,业务日志仍交由应用或 logrotate 管理。sudo journalctl --vacuum-time 3d sudo journalctl --vacuum-size 500M
二 应用内策略
- 使用 winston + winston-daily-rotate-file 在代码中实现按日/按大小轮转与保留:
要点:const winston = require('winston'); const DailyRotateFile = require('winston-daily-rotate-file'); const logger = winston.createLogger({ level: 'info', transports: [ new DailyRotateFile({ filename: '/path/to/your/nodejs/app/logs/app-%DATE%.log', datePattern: 'YYYY-MM-DD-HH', zippedArchive: true, maxSize: '20m', maxFiles: '14d' } ) ] } );- datePattern:按小时/天命名归档。
- zippedArchive:旧日志压缩归档。
- maxSize/maxFiles:控制单文件大小与保留天数,避免无限增长。
- 使用 pino 生态的 pino-rotate 等插件实现类似能力(period、maxFiles、gzip 等参数可按需配置)。
三 进程管理工具策略
- 使用 PM2 内置日志管理:
- 快速清理当前应用日志缓冲:
pm2 logs my-app --clear(仅清空缓冲,不删归档)。 - 配置最大单个日志大小与保留数量(ecosystem.config.js):
module.exports = { apps: [{ name: 'my-app', script: 'app.js', out_file: '/path/to/your/nodejs/logs/out.log', error_file: '/path/to/your/nodejs/logs/err.log', log_date_format: 'YYYY-MM-DD HH:mm Z', max_size: '10M', retain: 7 } ] } ; - 说明:max_size 触发轮转,retain 控制保留份数;PM2 适合无侵入接入与快速运维。
- 快速清理当前应用日志缓冲:
四 脚本与定时任务策略
- 编写 Node.js 清理脚本,按 mtime 删除过期日志并加入 cron 定期执行:
// clean-old-logs.js const fs = require('fs'); const path = require('path'); const logsDir = '/path/to/your/nodejs/logs'; const maxDays = 7; fs.readdir(logsDir, (err, files) => { if (err) return console.error(err); const now = Date.now(); files.forEach(f => { fs.stat(path.join(logsDir, f), (e, s) => { if (e) return console.error(e); const age = (now - s.mtimeMs) / (1000 * 3600 * 24); if (age > maxDays) fs.unlink(path.join(logsDir, f), () => { } ); } ); } ); } );- cron 示例(每天 01:00 清理 7 天前日志):
0 1 * * * find /path/to/your/nodejs/logs -type f -name "*.log" -mtime +7 -delete
- cron 示例(每天 01:00 清理 7 天前日志):
- 也可使用 shell 脚本 + cron 的方式,按文件数量或时间策略删除旧日志,适合简单场景与统一运维规范。
五 策略选择与落地建议
- 优先选择 应用内轮转(如 winston/pino)以获得更细粒度控制;在 systemd 环境下,业务日志与 journald 分离管理更清晰。
- 统一权限与路径:logrotate 的 create 指令与 PM2 的日志路径,均应使用运行应用的 实际用户/组,避免写入失败或安全风险。
- 避免误删:清理前先 备份 关键日志;对 journald 的清理仅限系统日志,业务日志交由应用或 logrotate 处理。
- 监控与告警:对 磁盘使用率 设置阈值告警;定期验证 轮转与压缩 是否生效(如检查 .gz 文件是否生成、旧文件是否被删除)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Node.js日志清理策略有哪些
本文地址: https://pptw.com/jishu/768293.html
