在Linux環境下管理Node.js應用程序的日志存儲空間,可以采用以下幾種策略:
fs、path、winston、bunyan 等)將日志寫入到服務器的文件系統中。例如,使用 winston 庫:const fs = require('fs');
const path = require('path');
const winston = require('winston');
const logDirectory = path.join(__dirname, 'logs');
if (!fs.existsSync(logDirectory)) {
fs.mkdirSync(logDirectory);
}
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: path.join(logDirectory, 'error.log'), level: 'error' }),
new winston.transports.File({ filename: path.join(logDirectory, 'combined.log') })
]
});
logger.info('Hello, world!');
logrotate 工具可以自動壓縮、刪除和歸檔日志文件,以防止日志文件占用過多的磁盤空間。創建一個 logrotate 配置文件(例如 /etc/logrotate.d/my-node-app),并添加以下內容:/path/to/your/node/app/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
}
這將每天旋轉日志文件,保留最近7天的日志,并對舊日志進行壓縮。
winston 和 winston-daily-rotate-fileconst winston = require('winston');
const { createLogger, format, transports } = winston;
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = createLogger({
level: 'info',
format: format.combine(format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), format.printf(({ timestamp, level, message }) => {
return `${timestamp} ${level}: ${message}`;
})),
transports: [
new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
logger.info('This is an info message');
logger.error('This is an error message');
logrotate 工具sudo nano /etc/logrotate.d/node-app
添加以下內容:
/var/log/node-app.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
dateext
}
解釋:
daily: 每天輪轉日志。rotate 7: 保留7個輪轉的日志文件。compress: 壓縮舊的日志文件。copytruncate: 復制后清空原文件,而不是移動。winston、pino、morgan 等)都提供了日志輪轉的功能。你可以配置這些庫來自動清理舊日志文件。logrotate(適用于Linux)。cron 定時任務來定期清理日志文件。Papertrail、Loggly 或 ELK Stack(Elasticsearch, Logstash, Kibana)這樣的服務。通過上述方法,可以有效地管理Linux環境下Node.js應用程序的日志存儲空間,確保系統的穩定運行和安全性。