Debian系统Node.js日志清理策略
在Debian系统中,管理Node.js应用程序的日志清理需结合系统工具与代码配置,确保日志文件不会无限增长占用磁盘空间。以下是具体、可操作的策略:
logrotate是Debian自带的日志管理工具,可自动完成日志轮转、压缩、删除等操作,无需修改应用代码,适合生产环境。
配置步骤:
sudo apt-get install logrotate。/etc/logrotate.d/目录下新建文件(如nodejs),添加以下内容(以/var/log/nodejs/*.log为例):/var/log/nodejs/*.log { daily # 每天轮转一次(可根据需求改为weekly/monthly) rotate 7 # 保留最近7个轮转日志(避免过多占用空间) compress # 压缩旧日志(节省空间,如app.log.1.gz) delaycompress # 延迟压缩(当前轮转的日志不压缩,下次轮转时再压缩) missingok # 若日志文件不存在,不报错 notifempty # 若日志为空,不轮转 create 0640 root adm # 轮转后创建新日志文件,权限0640,属主root,属组adm } sudo logrotate -f /etc/logrotate.d/nodejs强制轮转,检查/var/log/nodejs/目录是否生成压缩日志及新日志文件。/etc/cron.daily/logrotate每日自动运行,无需额外配置。若需更细粒度的控制(如按文件大小轮转、自定义日志格式),可通过Node.js日志库实现。常用库及配置如下:
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.json(), transports: [ new DailyRotateFile({ filename: '/var/log/nodejs/app-%DATE%.log', // 日志文件名(含日期) datePattern: 'YYYY-MM-DD', // 日期格式 zippedArchive: true, // 压缩旧日志 maxSize: '20m', // 单个日志文件最大20MB maxFiles: '14d' // 保留14天的日志 }) ] }); logger.info('This is a log message.'); // 记录日志 npm install pino pino-rotate。const pino = require('pino'); const rotate = require('pino-rotate'); const logger = pino( { level: 'info' }, rotate({ period: '1d', // 每天轮转一次 path: '/var/log/nodejs/pino-', // 日志文件路径前缀 limit: 14 // 保留14天的日志 }) ); logger.info('This is a log message.'); // 记录日志 这些库可自动处理日志轮转,无需依赖系统工具,适合需要深度定制的场景。若日志量较小或仅需临时清理,可通过命令行快速删除旧日志:
rm /path/to/logfile.log(谨慎使用,避免误删)。find /var/log/nodejs/ -type f -name "*.log" -mtime +7 -exec rm -f {} \; 其中,-mtime +7表示查找7天前修改的文件,-exec rm -f {} \;表示删除匹配的文件。crontab -e,添加以下内容(每天凌晨1点执行):0 1 * * * find /var/log/nodejs/ -type f -name "*.log" -mtime +7 -exec rm -f {} \; 保存后,cron会自动执行清理任务。rotate(保留数量)或maxSize(单个文件大小),避免磁盘空间耗尽。/var/log/nodejs/)的权限正确(通常为root:adm),避免应用无法写入日志。df -h命令定期检查磁盘使用情况,及时调整清理策略。