Ubuntu下清理Node.js日志的常用方法
若需快速清理指定目录下的Node.js日志,可通过终端手动操作。首先定位日志目录(通常为/path/to/your/nodejs/app/logs/
或/var/log/nodejs/
),再使用rm
命令删除:
# 进入日志目录
cd /path/to/your/nodejs/app/logs
# 删除所有.log文件(谨慎使用通配符)
rm *.log
# 若需递归删除子目录中的日志
rm -r *.log
注意:此方法需手动执行,无法自动化,适合临时清理。
logrotate
是Ubuntu系统自带的日志管理工具,可自动轮转、压缩、删除旧日志。
sudo apt-get update
sudo apt-get install logrotate
/etc/logrotate.d/
目录下新建文件(如nodejs-app
),添加以下内容(根据实际路径调整):/path/to/your/nodejs/app/logs/*.log {
daily # 每天轮转
rotate 7 # 保留最近7份日志
compress # 压缩旧日志(.gz格式)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root adm # 新建日志文件权限
}
sudo logrotate -f /etc/logrotate.d/nodejs-app
此方法可实现自动化定期清理,无需额外脚本。若需更灵活的清理逻辑(如按文件大小、特定命名规则),可编写Shell脚本并通过cron
定时执行。
/usr/local/bin/clean-nodejs-logs.sh
):#!/bin/bash
LOG_DIR="/path/to/your/nodejs/app/logs"
# 删除7天前的.log文件
find "$LOG_DIR" -type f -name "*.log" -mtime +7 -exec rm -f {} \;
sudo chmod +x /usr/local/bin/clean-nodejs-logs.sh
crontab -e
添加以下内容:0 1 * * * /usr/local/bin/clean-nodejs-logs.sh
此方法适合需要自定义清理条件的场景。若Node.js应用通过systemd
管理(如使用systemctl
启动),可创建systemd定时任务实现日志清理。
/usr/local/bin/clean-nodejs-logs.sh
,内容同上)。/etc/systemd/system/clean-nodejs-logs.service
):[Unit]
Description=Clean Node.js logs older than 7 days
[Service]
ExecStart=/usr/local/bin/clean-nodejs-logs.sh
/etc/systemd/system/clean-nodejs-logs.timer
):[Unit]
Description=Run clean-nodejs-logs daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable clean-nodejs-logs.timer
sudo systemctl start clean-nodejs-logs.timer
systemd定时任务与系统深度集成,可靠性高,适合生产环境。通过第三方日志库(如winston
+winston-daily-rotate-file
),在应用代码中实现日志的自动轮换与清理,避免日志文件无限增长。
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: '/path/to/your/nodejs/app/logs/app-%DATE%.log', // 日志文件名格式
datePattern: 'YYYY-MM-DD', // 按天分割
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个日志文件最大20MB
maxFiles: '14d', // 保留最近14天日志
}),
],
});
// 使用logger记录日志
logger.info('This is a log message');
此方法从应用源头控制日志,无需依赖外部工具,适合需要精细化日志管理的场景。若Node.js日志通过systemd-journald
服务记录(如应用以systemd
方式运行),可使用journalctl
命令清理系统日志。
sudo journalctl --vacuum-time 3d
sudo journalctl --vacuum-size 500M
此方法适合清理系统级日志,若Node.js日志集成到系统日志中,可间接减少日志占用。