Node.js 日志輪轉策略主要是通過配置日志庫來實現日志文件的自動切割、壓縮和歸檔。常見的日志庫如 Winston 和 Pino 都提供了日志輪轉的功能。以下是使用 Winston 庫實現日志輪轉策略的示例:
npm install winston
const winston = require('winston');
const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = createLogger({
transports: [transport]
});
// 在開發環境下,還可以在控制臺輸出
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
在這個配置中:
filename
參數指定了日志文件的名稱,并使用日期模式 %DATE%
來自動添加時間戳。zippedArchive
參數設置為 true
,表示生成的舊日志文件會被壓縮。maxSize
參數設置為 20m
,表示每個日志文件的最大大小為 20MB。maxFiles
參數設置為 14d
,表示保留 14 天的日志文件。通過上述配置,Winston 會自動根據時間和文件大小對日志文件進行切割,并壓縮舊文件,從而避免單個日志文件過大,確保日志管理的有效性。
此外,Node.js 的 fs
模塊也可以通過配置來實現基本的日志輪轉,例如使用 RotatingFileHandler
:
const logging = require('logging');
logging.configure({
appenders: {
cheese: {
type: 'dateFile',
filename: 'logs/cheese',
pattern: '-yyyy-MM-dd.log',
alwaysIncludePattern: true,
maxLogSize: 1024 * 12,
}
},
categories: {
default: {
appenders: ['cheese'],
level: 'trace'
}
}
});
const logger = logging.getLogger('cheese');
logger.info('這是一條信息日志');
在這個示例中,maxLogSize
參數設置每個日志文件的最大大小為 12KB,當日志文件達到指定大小時,新的日志將被創建,舊日志文件將被重命名并保留。
總之,通過合理配置日志庫和日志輪轉策略,可以有效地管理日志文件,確保系統性能和可維護性。