在 Linux 上清理 Node.js 日志,要根据日志是怎么产生的来处理。下面按常见情况说明做法。
常见位置:
logs//var/log/你的项目名/~/logs查看:
ls -lh logs/
du -sh logs/*
PM2 默认日志在:
~/.pm2/logs/
查看:
pm2 logs --lines 0
ls -lh ~/.pm2/logs
如果是用 systemctl 启动的:
journalctl -u your-node-service
不要直接删日志文件,用 logrotate。
示例(/etc/logrotate.d/node-app):
/var/log/node-app/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
测试:
logrotate -d /etc/logrotate.d/node-app
pm2 flush
或只清某个服务:
pm2 flush app-name
不要 rm 正在写的日志,用:
> logs/app.log
或
truncate -s 0 logs/app.log
find logs/ -name "*.log" -mtime +7 -delete
推荐:
winstonpino示例(winston + 每天切分):
const { createLogger, transports } = require('winston');
require('winston-daily-rotate-file');
const transport = new transports.DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d'
});
rm -f logs/app.log # 正在写入会丢日志或报错
会导致:
df -h
du -sh /var/log/*
lsof | grep deleted
如果你愿意,可以告诉我:
我可以给你精确到命令的配置方案。