我有两个不同的winston记录器,看起来像这样(根据我的功能,它们根据不同的日志有两个独立的记录器) - :
var security = new(winston.Logger)({
transports: [
new(require('winston-daily-rotate-file'))({
filename: logDir + '/-security.log',
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
timestamp: function() {
return moment().format('D/MM/YYYY HH:mm:ss:SSS');
}
})
]
});
然后我还有一个:
var system = new(winston.Logger)({
transports: [
new(require('winston-daily-rotate-file'))({
filename: logDir + '/-security.log',
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
timestamp: function() {
return moment().format('D/MM/YYYY HH:mm:ss:SSS');
}
})
]
});
但是,我还有一个verbose.log
文件,我希望安全和系统日志文件中的所有日志都写入详细信息。最好的方法是什么?
我尝试将文件名(即verbose.log)添加到每个传输中,但这不起作用,因为我收到错误
Error: Transport already attached: dailyRotateFile, assign a different name
答案 0 :(得分:0)
这是winston的常见问题,但需要解决的问题很简单 由于winston的编码方式,它不能自己区分你的两个传输,并且需要你通过给它们不同的名称明确地声明它们是独立的:
var security = new(winston.Logger)({
transports: [
new(require('winston-daily-rotate-file'))({
//=>
name: 'foo',
//<=
filename: logDir + '/-security.log',
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
timestamp: function() {
return moment().format('D/MM/YYYY HH:mm:ss:SSS');
}
})
]
});
var system = new(winston.Logger)({
transports: [
new(require('winston-daily-rotate-file'))({
//=>
name: 'bar',
//<=
filename: logDir + '/-security.log',
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
timestamp: function() {
return moment().format('D/MM/YYYY HH:mm:ss:SSS');
}
})
]
});
名称本身并不重要,只要它不同,一个简单的方法是使用文件名和其他标识符进行传输。
来源:issue #101 of the official Github
编辑:
var verbose = new(require('winston-daily-rotate-file'))({
name: 'baz',
filename: logDir + '/-verbose.log',
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
timestamp: function() {
return moment().format('D/MM/YYYY HH:mm:ss:SSS');
}
})
var security = new(winston.Logger)({
transports: [
new(require('winston-daily-rotate-file'))({
//=>
name: 'foo',
//<=
filename: logDir + '/-security.log',
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
timestamp: function() {
return moment().format('D/MM/YYYY HH:mm:ss:SSS');
}
}),
//=>
verbose
//<=
]
});
var system = new(winston.Logger)({
transports: [
new(require('winston-daily-rotate-file'))({
//=>
name: 'bar',
//<=
filename: logDir + '/-security.log',
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
timestamp: function() {
return moment().format('D/MM/YYYY HH:mm:ss:SSS');
}
}),
//=>
verbose
//<=
]
});