Node.js 温斯顿:如何轮换原木
使用Winston处理node.js的日志记录时,如何旋转日志。也就是说,我如何为应用程序运行的每一天创建一个新文件Node.js 温斯顿:如何轮换原木,node.js,flatiron.js,Node.js,Flatiron.js,使用Winston处理node.js的日志记录时,如何旋转日志。也就是说,我如何为应用程序运行的每一天创建一个新文件 var logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)(), new (winston.transports.File)({ filename: '2012-07-09.log' }) ] });
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' });
温斯顿是这里的作者和维护者
每天登录到新文件当前是一个打开的功能请求:。我很想看到有人实施它
也就是说,还有其他选择:
根据作者的说法,这是一个: winston的文件传输,允许根据大小和时间旋转日志文件 文件传输通过“filename”选项接受文件名,并将该文件用作主要日志记录目标。 如果文件增长超过“maxsize”字节,则重命名当前日志文件并创建新的主日志磁贴。 重命名日志文件的名称格式为“basenameYYYYMMDD[a-z].bak” 可供选择的方案有:
- 级别:此传输应记录的消息级别
- 静默:指示是否抑制输出的布尔标志
- 时间戳:布尔标志,指示是否应在输出前加上时间戳(默认为true)。如果指定了函数,则将使用其返回值而不是时间戳
- 文件名:要写入输出的日志文件的文件名
- dirname:将在其中创建日志文件的文件夹
- maxsize:日志文件的最大大小(以字节为单位),如果超过该大小,则会创建一个新文件
- json:如果为true,消息将被记录为json(默认为true)
该功能已存在,我们正在生产中使用,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
})
]
});
截至2012年12月18日,Winston现在提供此功能(请参阅)您可以使用以下代码每天旋转日志文件:
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.createLogger)({
transports: [
transport
]
});
logger.info('Hello World!');
其他人已经对这个问题给出了很好的答案。但是,对于那些正在寻找如何使用更现代的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' });
+1-好问题!作为一个纯粹的猜测,您可能会编写自己的传输文件记录器,其中包含有关如何记录的选项(类似于IIS和其他web服务器)?此传输现在已添加到自己的npm模块中:它已更改: