Debian系统Node.js日志清理方法
一 常用方法概览
二 手动清理步骤
sudo cp /path/to/app.log /path/to/backup/app.log.baksudo rm /path/to/app.log三 使用logrotate系统轮转
sudo apt-get update && sudo apt-get install logrotate/var/log/nodejs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
}
sudo logrotate -d /etc/logrotate.d/nodejssudo logrotate -f /etc/logrotate.d/nodejs四 在Node.js中使用日志库轮转
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({
filename: '/var/log/nodejs/app.log',
maxsize: 10 * 1024 * 1024, // 10MB
maxFiles: 10
})
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({ format: winston.format.simple() }));
}
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
level: 'info',
transports: [
new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
五 使用cron或脚本兜底清理
0 1 * * * find /path/to/nodejs/logs -type f -name "*.log" -mtime +7 -exec rm {} \;
const fs = require('fs').promises;
const path = require('path');
const logsDir = '/path/to/nodejs/logs';
const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1000;
(async () => {
const files = await fs.readdir(logsDir);
for (const f of files) {
const fp = path.join(logsDir, f);
const st = await fs.stat(fp);
if (st.isFile() && st.mtimeMs < cutoff) await fs.unlink(fp);
}
})().catch(console.error);