要为Node.js应用程序设置日志自动清理机制,你可以使用一些流行的日志库,如winston或morgan,它们都支持日志文件的自动清理。这里以winston为例,介绍如何设置日志自动清理机制。
首先,确保你已经安装了winston:
npm install winston
接下来,创建一个名为logger.js的文件,并添加以下代码:
const fs = require('fs');
const path = require('path');
const { format, transports } = require('winston');
// 日志文件存储目录
const logDir = path.join(__dirname, 'logs');
// 如果日志目录不存在,则创建
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
// 日志文件名格式
const logFileName = 'app-%DATE%.log';
// 创建一个winston日志记录器
const logger = transports.File({
filename: path.join(logDir, logFileName),
level: 'info',
format: format.combine(
format.timestamp(),
format.printf(({ timestamp, level, message }) => {
return `${timestamp} ${level}: ${message}`;
})
),
});
// 如果是生产环境,则添加日志文件自动清理功能
if (process.env.NODE_ENV === 'production') {
const { createLogger, format, transports } = require('winston-daily-rotate-file');
const dailyRotateLogger = createLogger({
level: 'info',
format: format.combine(
format.timestamp(),
format.printf(({ timestamp, level, message }) => {
return `${timestamp} ${level}: ${message}`;
})
),
transports: [
new transports.DailyRotateFile({
filename: path.join(logDir, logFileName),
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
}),
],
});
logger.add(dailyRotateLogger);
}
module.exports = logger;
在这个示例中,我们使用了winston-daily-rotate-file库来实现日志文件的自动清理。它会在每天生成一个新的日志文件,并在日志文件达到20MB时进行压缩。同时,它会保留最近14天的日志文件。
要使用这个日志记录器,只需在你的Node.js应用程序中引入它:
const logger = require('./logger');
logger.info('Hello, world!');
现在,你的Node.js应用程序将使用自动清理机制来管理日志文件。