在Linux系統中,日志輪轉是一種管理日志文件大小和數量的方法,以防止日志文件過大占用過多磁盤空間。以下是在Linux系統中使用Node.js進行日志輪轉的方法:
fs模塊手動實現日志輪轉Node.js的fs模塊提供了豐富的文件操作API,可以手動實現文件輪轉。以下是一個簡單的示例:
const fs = require('fs');
const path = require('path');
const logFilePath = path.join(__dirname, 'app.log');
const maxFileSize = 1024 * 1024; // 1MB
function rotateLogFile() {
const stats = fs.statSync(logFilePath);
if (stats.size >= maxFileSize) {
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
const newFilePath = `${logFilePath}.${timestamp}`;
fs.renameSync(logFilePath, newFilePath);
}
}
function appendLog(message) {
rotateLogFile();
fs.appendFileSync(logFilePath, message + '\n');
}
// 示例使用
appendLog('這是一條日志信息');
winston和winston-daily-rotate-file實現日志輪轉winston是一個強大的日志庫,結合winston-daily-rotate-file插件,可以輕松實現按天或按文件大小進行日志輪轉。以下是一個示例配置:
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new DailyRotateFile({
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '1m',
maxFiles: '14d'
})
]
});
logger.info('這是一條日志信息');
logrotatelogrotate是一個Linux系統日志的管理工具,可以對單個日志文件或者某個目錄下的文件按時間/大小進行切割、壓縮操作,并指定日志保存數量。以下是一個簡單的logrotate配置示例:
編輯logrotate配置文件:
sudo nano /etc/logrotate.d/myapp
添加配置:
/var/log/myapp/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 640 root adm
dateext
dateformat -%Y-%m-%d-%s
}
這個配置意味著myapp的日志文件每天輪轉一次,保留最近30天的日志文件,并壓縮舊的日志文件。
測試配置:
sudo logrotate -d /etc/logrotate.d/myapp
強制輪轉日志文件:
sudo logrotate -f /etc/logrotate.d/myapp
重啟服務:
如果你修改了服務器的啟動腳本或配置文件以使用logrotate,你可能需要重啟相關服務以確保新的配置生效。例如,對于Apache服務器:
sudo systemctl restart apache2
通過以上方法,你可以在Linux系統中使用Node.js實現日志輪轉,確保日志文件的管理既高效又安全。