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
命令定期检查磁盘使用情况,及时调整清理策略。