我正在使用winston将文件记录到服务器中,按预期工作,现在我想设置天数限制,让我们说3天后我想要删除3天前记录的文件,是否可以实现使用winston轮换?
main.js
winston.add(winston.transports.File, {
filename: './Logs/server.log',
maxsize:'15000',
timestamp:false
});
答案 0 :(得分:0)
您可以使用Winston daily rotate。
简短的回答:是的,您可以通过在maxFiles:3d
选项中添加transport
来实现。
如果未设置maxFiles
,则不会删除任何日志文件。
如果设置maxFiles:3d
,它将删除最近3天创建的所有日志文件。
maxFiles:3
,当它超过3个时,它将删除日志文件。注意:可以在使用zippedArchive: true
进行删除之前对文件进行归档,如果未设置,则日志文件将被删除而不进行任何备份。到现在为止,我还没有办法自动删除zip文件。
样品设置:
require('winston-daily-rotate-file');
var transport = new (winston.transports.DailyRotateFile)({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
transport.on('rotate', function(oldFilename, newFilename) {
// do something fun
});
var logger = winston.createLogger({
transports: [
transport
]
});
logger.info('Hello World!');```
答案 1 :(得分:0)
我花了几个小时试图了解日志轮换的工作方式。至少Winston-daily-rotate-file版本3.10.0使用file-stream-rotator进行文件旋转。我发现可以使用以下选项:
const options = (level: string) => ({
name: `${level}-log`,
filename: `${APP_NAME}.${level}.%DATE%.log`,
dirname: CONFIG.logDir,
datePattern: 'YYYY-MM-DD',
maxFiles: '1d',
auditFile: `${CONFIG.logDir}/${APP_NAME}.${level}-audit.json`,
level,
})
new winston.transports.DailyRotateFile(options('error'))
这使Winston可以按应用程序和日志记录级别创建audit.json文件。如果不指定auditFile选项,则最终会生成生成的审计文件名,该文件名由options的哈希值组成,每当更改选项时,哈希文件名就会更改。如果更改选项,则审核文件名将更改,并且Winston无法在更改选项之前删除文件。
我认为,使用审核文件不是一个好方法。最好从日志文件名中解析时间戳而无需任何额外的文件。例如,您不能将日志轮换添加到现有应用程序中,而不能让Winston删除在配置Winston日志轮换之前创建的日志文件。