适用于需要立即释放磁盘空间的场景,直接通过终端命令删除指定目录下的日志文件。
cd
命令进入Node.js应用的日志文件夹(如/path/to/your/nodejs/app/logs
)。app.log
,执行rm app.log
。*
删除所有.log
文件,如rm *.log
。-rf
参数(谨慎使用,避免误删),如rm -rf /path/to/logs/*
。logrotate
工具(自动轮换与清理)logrotate
是Ubuntu系统自带的日志管理工具,可自动完成日志的轮换、压缩、删除,避免手动操作。
sudo apt-get install logrotate
。/etc/logrotate.d/
目录下新建配置文件(如nodeapp
),内容如下(根据实际路径调整):/path/to/your/nodejs/app/logs/*.log {
daily # 每天轮换
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(如app.log.1.gz)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮换
create 0640 root adm # 创建新日志文件并设置权限
}
sudo logrotate -f /etc/logrotate.d/nodeapp
。journalctl
清理系统日志(针对systemd服务)若Node.js应用通过systemd
运行(如使用pm2
或systemctl
启动),其日志会存储在系统日志中,可通过journalctl
命令清理。
sudo journalctl --vacuum-time 3d
。sudo journalctl --vacuum-size 500M
。通过第三方日志库(如winston-daily-rotate-file
)在应用层实现日志的自动轮换,无需依赖系统工具。
npm install 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: '/path/to/your/nodejs/app/logs/app-%DATE%.log', // 日志文件名(含日期)
datePattern: 'YYYY-MM-DD', // 日期格式
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个日志文件最大20MB
maxFiles: '14d' // 保留最近14天的日志
})
]
});
logger.info('This is a log message.'); // 记录日志
此配置会每天生成新的日志文件,保留14天,并自动压缩旧日志。若需更灵活的清理规则(如按文件大小、自定义保留天数),可编写Shell脚本并通过cron
定时运行。
cleanup-nodejs-logs.sh
,内容如下(替换为实际路径和保留天数):#!/bin/bash
LOG_DIR="/path/to/your/nodejs/app/logs"
DAYS_TO_KEEP=7
# 查找并删除超过指定天数的.log文件
find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
echo "Deleted logs older than $DAYS_TO_KEEP days in $LOG_DIR"
chmod +x cleanup-nodejs-logs.sh
。crontab -e
添加以下行(如每天凌晨0点运行):0 0 * * * /path/to/cleanup-nodejs-logs.sh
此脚本会每天自动清理超过7天的日志文件。logrotate -d /etc/logrotate.d/nodeapp
(dry run)测试配置是否正确。df -h
检查磁盘使用情况,确保存储充足。