如何在使用Winston处理node.js的日志记录时旋转日志。也就是说,如何为应用程序运行的每一天创建一个新文件?
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)(),
new (winston.transports.File)({ filename: '2012-07-09.log' })
]
});
logger.log('info', 'Test Log Message', { anything: 'This is metadata' });
答案 0 :(得分:23)
该功能已经存在,我们正在制作中使用它,winston.transports.DailyRotateFile:
var timeFormatFn = function() {
'use strict';
return moment().format(cfg.timeFormat);
};
var logger = new(winston.Logger)({
exitOnError: false,
transports: [
new(winston.transports.DailyRotateFile)({
filename: cfg.appLogName,
dirname: __dirname + '/../' + cfg.logsDirectory,
datePattern: cfg.rollingDatePattern,
timestamp: timeFormatFn
}),
new(winston.transports.Console)({
colorize: true,
timestamp: timeFormatFn
})
]
});
答案 1 :(得分:21)
winston作者和维护者。
每天记录到一个新文件目前是一个开放的功能请求:https://github.com/flatiron/winston/issues/10。很想看到有人实现它。
那就是说,还有其他选择:
文件传输接受maxsize选项,当日志文件超过特定大小(以字节为单位)时,该选项将旋转日志文件。
还有一个带有新传输的开放式请求我还没有机会真正深入研究“fileRotate”,这似乎是基于日期的轮换:https://github.com/flatiron/winston/pull/120/files
答案 2 :(得分:3)
根据winston-filerotatedate的作者,它是:
winston的文件传输,允许根据大小和时间轮换日志文件。
文件传输通过“文件名”选项接受文件名,并将该文件用作主要日志记录目标。 如果文件超过'maxsize'字节,则重命名当前日志文件并创建新的主日志磁贴。 重命名的日志文件的名称格式为'basenameYYYYMMDD [a-z] .bak'。
可用选项包括:
- 级别:此传输应记录的邮件级别。
- silent:布尔标志,指示是否抑制输出。
- timestamp:布尔标志,指示我们是否应该在时间戳前面添加输出(默认为true)。如果指定了function,则将使用其返回值而不是timestamps。
- filename:要将输出写入的日志文件的文件名。
- dirname:将在其中创建日志文件的文件夹。
- maxsize:日志文件的最大大小(以字节为单位),如果超出大小,则会创建新文件。
- json:如果为true,则消息将记录为JSON(默认为true)。
答案 3 :(得分:1)
截至2012年12月18日,此功能现已在Winston中提供(请参阅https://github.com/flatiron/winston/pull/205)
答案 4 :(得分:1)
您可以使用以下代码每天轮换日志文件:
var winston = require('winston');
require('winston-daily-rotate-file');
var transport = new (winston.transports.DailyRotateFile)({
filename: './log',
datePattern: 'yyyy-MM-dd.',
prepend: true,
level: info
});
var logger = new (winston.Logger)({
transports: [
transport
]
});
logger.info('Hello World!');
答案 5 :(得分:0)
其他人已经对这个问题给出了很好的答案。但是对于那些正在寻找如何使用 winston-daily-rotate-file 在更现代的 JavaScript 语法(ES6 及更高版本)中执行此操作的示例的人,以下代码应该会有所帮助:
const { createLogger, transports } = require('winston');
require('winston-daily-rotate-file');
const logger = createLogger({
level: 'info',
transports: [
new transports.DailyRotateFile({
filename: 'info-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
level: 'info'
})
]
});
logger.log('info', 'Test Log Message', { anything: 'This is metadata' });