Ubuntu Node.js日志清理策略
导读:Ubuntu Node.js日志清理策略 1. 使用logrotate工具(系统级推荐) logrotate是Ubuntu系统自带的日志管理工具,专为日志轮转、压缩、删除设计,适合集中管理Node.js应用日志。 安装logrotate(...
Ubuntu Node.js日志清理策略
1. 使用logrotate工具(系统级推荐)
logrotate是Ubuntu系统自带的日志管理工具,专为日志轮转、压缩、删除设计,适合集中管理Node.js应用日志。
- 安装logrotate(若未安装):
sudo apt-get update & & sudo apt-get install logrotate
- 创建Node.js专用配置文件:
在/etc/logrotate.d/
目录下新建nodejs-app
文件(如/etc/logrotate.d/nodejs-app
),添加以下内容(根据实际路径调整):/path/to/your/nodejs/app/logs/*.log { daily # 每天轮转一次(可选:weekly/monthly) rotate 7 # 保留最近7个日志文件 compress # 压缩旧日志(节省空间) delaycompress # 延迟压缩(如第8个文件才压缩,避免压缩当天日志) missingok # 日志文件不存在时不报错 notifempty # 日志为空时不轮转 create 0640 root adm # 新日志文件权限(属主root,属组adm) sharedscripts # 所有日志轮转完成后执行后续命令 postrotate # 可选:重启Node.js应用(若日志写入依赖进程) systemctl restart your-nodejs-service || true endscript }
- 测试配置有效性:
手动触发轮转(强制执行,即使未到轮转时间):sudo logrotate -f /etc/logrotate.d/nodejs-app
- 验证自动执行:
logrotate默认通过/etc/cron.daily/logrotate
每日自动运行,可通过以下命令查看执行日志:tail -f /var/log/syslog | grep logrotate
2. 集成Node.js日志库(应用级控制)
通过Node.js日志库(如winston)内置的轮转功能,实现应用层日志管理,适合需要精细化控制的场景。
- 安装winston及轮转插件:
npm install winston winston-daily-rotate-file
- 配置日志轮转:
在应用代码中添加以下配置(示例):
参数说明:const winston = require('winston'); const DailyRotateFile = require('winston-daily-rotate-file'); const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new DailyRotateFile({ filename: '/path/to/your/nodejs/app/logs/application-%DATE%.log', // 日志文件名(含日期) datePattern: 'YYYY-MM-DD', // 日期格式(每天一个文件) zippedArchive: true, // 压缩旧日志 maxSize: '20m', // 单个日志文件最大20MB(触发轮转) maxFiles: '14d', // 保留14天的日志 createSymlink: true, // 创建符号链接(指向最新日志) symlinkName: 'current.log' // 符号链接名称 } ) ] } ); // 使用logger记录日志 logger.info('Application started');
maxSize
:单个日志文件大小阈值(超过则轮转);maxFiles
:保留的日志文件天数(或数量,如100
表示保留100个文件);zippedArchive
:是否压缩旧日志(减少存储占用)。
3. 手动清理(临时应急)
若需立即释放空间,可通过命令行手动删除旧日志文件(谨慎使用,避免误删)。
- 删除指定目录下所有.log文件:
rm /path/to/your/nodejs/app/logs/*.log
- 删除超过7天的.log文件(结合
find
命令):
参数说明:find /path/to/your/nodejs/app/logs -type f -name "*.log" -mtime +7 -exec rm -f { } \;
-type f
:仅查找文件(排除目录);-mtime +7
:修改时间超过7天的文件;-exec rm -f { } \;
:对找到的文件执行删除操作。
4. 使用systemd定时任务(可选增强)
若Node.js应用通过systemd管理,可创建定时任务定期执行清理脚本(适合需要与系统服务集成的场景)。
- 编写清理脚本(如
/usr/local/bin/clean-nodejs-logs.sh
):#!/bin/bash LOG_DIR="/path/to/your/nodejs/app/logs" find "$LOG_DIR" -type f -name "*.log" -mtime 7 -exec rm -f { } \;
- 赋予执行权限:
sudo chmod +x /usr/local/bin/clean-nodejs-logs.sh
- 创建systemd定时器(如
/etc/systemd/system/clean-nodejs-logs.timer
):[Unit] Description=Daily cleanup of Node.js logs older than 7 days [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target
- 创建systemd服务(如
/etc/systemd/system/clean-nodejs-logs.service
):[Unit] Description=Clean Node.js logs [Service] ExecStart=/usr/local/bin/clean-nodejs-logs.sh
- 激活并启动定时任务:
sudo systemctl daemon-reload sudo systemctl enable --now clean-nodejs-logs.timer
策略选择建议
- 优先使用logrotate:系统级工具,无需修改应用代码,支持自动执行,适合大多数场景;
- 应用级控制(winston):适合需要精细化日志管理(如按日志级别轮转、上传到日志平台)的应用;
- 手动清理:临时解决磁盘空间不足问题,不建议作为长期策略;
- systemd定时任务:适合与systemd集成的应用,增强任务可靠性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Node.js日志清理策略
本文地址: https://pptw.com/jishu/729895.html