适用于需要立即释放空间的场景,通过命令行直接删除指定日志文件。
logs子目录(如/var/log/nodejs/your-app.log)或项目根目录的logs文件夹中。truncate命令(避免误删文件本身):sudo truncate -s 0 /path/to/your/nodejs/logs/*.log
find命令查找并删除指定天数前的日志(如7天前):sudo find /path/to/your/nodejs/logs -type f -name "*.log" -mtime +7 -exec rm -f {} \;
注意:执行前需确认日志路径正确,避免误删系统或其他应用的日志文件。
Ubuntu系统自带的日志管理工具,可自动完成日志轮转(分割)、压缩、删除旧日志,无需手动干预。
sudo apt-get update && sudo apt-get install logrotate
/etc/logrotate.d/目录下创建Node.js专用配置文件(如nodejs-app),内容示例如下:/path/to/your/nodejs/logs/*.log {
daily # 每天轮转
rotate 7 # 保留最近7个轮转文件
compress # 压缩旧日志(如.gz格式)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root adm # 新建日志文件权限及属主
}
sudo logrotate -d /etc/logrotate.d/nodejs-app # dry run(模拟运行)
sudo logrotate -f /etc/logrotate.d/nodejs-app # 强制运行
优势:系统级工具,支持定时任务(默认每天执行),配置灵活,适合长期管理。
适用于需要自定义清理逻辑(如按文件大小、特定命名规则清理)的场景。
/usr/local/bin/clean-nodejs-logs.sh,内容如下:#!/bin/bash
LOG_DIR="/path/to/your/nodejs/logs"
DAYS_TO_KEEP=7
find "$LOG_DIR" -type f -name "*.log" -mtime +"$DAYS_TO_KEEP" -exec rm -f {} \;
sudo chmod +x /usr/local/bin/clean-nodejs-logs.sh
crontab -e),添加以下行(每天凌晨1点执行):0 1 * * * /usr/local/bin/clean-nodejs-logs.sh
说明:通过cron定时触发脚本,实现自动化清理,适合需要灵活调整清理频率的场景。
适用于需要在应用内部控制日志清理的场景(如根据业务逻辑动态清理)。
const fs = require('fs');
const path = require('path');
const logDir = './logs'; // 日志目录
const maxAge = 7 * 24 * 60 * 60 * 1000; // 7天的毫秒数
fs.readdir(logDir, (err, files) => {
if (err) throw err;
files.forEach(file => {
const filePath = path.join(logDir, file);
fs.stat(filePath, (err, stats) => {
if (err) throw err;
if (stats.isFile() && Date.now() - stats.mtime > maxAge) {
fs.unlink(filePath, err => {
if (err) throw err;
console.log(`Deleted: ${filePath}`);
});
}
});
});
});
setInterval每天执行一次,或结合cron定时调用脚本。若使用日志库(如winston),可通过插件实现日志自动轮转与清理,无需额外脚本。
npm install winston winston-daily-rotate-file
DailyRotateFile传输:const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new DailyRotateFile({
filename: '/path/to/your/nodejs/logs/combined.log',
datePattern: 'YYYY-MM-DD', // 按天分割
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个日志文件最大20MB
maxFiles: '14d', // 保留14天日志
}),
],
});
logger.info('This is a log message.');
优势:与应用深度集成,支持按大小、时间分割日志,自动清理旧日志,适合使用winston的项目。
适用于不熟悉命令行的用户,通过图形界面快速清理系统日志(包括Node.js日志)。
sudo add-apt-repository ppa:gerardpuig/ppa
sudo apt update
sudo apt install ubuntu-cleaner
以上方法覆盖了从临时手动清理到自动化长期管理的不同需求,可根据实际场景选择合适的方式。建议优先使用logrotate或日志库的内置功能,实现自动化管理,减少人工干预。