这是我设置的基本winston记录器:
var winston = require('winston')
var systemLogger = new (winston.Logger)({
transports: [
new (winston.transports.File)({
name: 'system-file',
// log which stores all the errors
filename: './test.log',
json: true,
timestamp: true
})
]
})
systemLogger.log('info', 'hello')
systemLogger.log('error', '-----hello2')
这会创建一个这样的日志文件:
{"level":"info","message":"hello","timestamp":"2016-08-18T11:48:22.081Z"}
{"level":"error","message":"-----hello2","timestamp":"2016-08-18T11:48:22.083Z"}
但我想在文件中看起来像这样:
INFO: 2016-08-18T11:48:22.081Z hello
ERROR: 2016-08-18T11:48:22.083Z *** -----hello2 ***
这可能吗?
我读过这个 - https://github.com/winstonjs/winston#custom-log-format但我实际上找不到如何做到这一点 - 如果可能的话。
我尝试过添加格式化程序:
formatter: function(options) {
// Return string will be passed to logger.
if (options.level === 'error') {
return options.timestamp() +' ******** '+ options.level.toUpperCase() +' ******** '+ (undefined !== options.message ? options.message : '')
}
else if (options.level === 'info') {
return options.timestamp() +' '+ options.level.toUpperCase() +' '+ (undefined !== options.message ? options.message : '')
}
}
然而,这似乎只适用于Console打印,而不适用于File。因为teh文件的保存方式与没有格式化程序的方式相同。
答案 0 :(得分:0)
在您的记录器设置代码中,您必须放置格式化程序以及从格式化程序返回的字符串,它将显示在您的日志文件中。
formatter: function(options) {
// Return string will be passed to logger.
return options.timestamp() +' '+ options.level.toUpperCase() +' '+ (undefined !== options.message ? options.message : '') +
(options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : '' );
}
因此,上面的格式化程序将首先打印时间戳,然后是日志级别,然后是您记录的实际消息。
希望这会有所帮助......
答案 1 :(得分:0)
您需要创建格式化程序函数:
$ cat logger.js
var winston = require('winston');
module.exports = (function(){
function formatter (args){
var timestamp = new Date().toISOString(),
level = args.level.toUpperCase(),
message = args.message;
return level+": "+timestamp+" "+message ;
}
return new (winston.Logger)({
transports: [
new (winston.transports.Console)({
formatter: formatter,
}),
new (winston.transports.File)({
formatter: formatter,
filename : "./logs/custom-logger.log",
maxsize : 1024 * 1024 * 500,
maxFiles : 10,
json : false,
tailable : true,
})
]
});
}());
答案 2 :(得分:0)
您需要做的只是添加:json : false
所以它看起来像这样:
var winston = require('winston')
var systemLogger = new (winston.Logger)({
transports: [
new (winston.transports.File)({
name: 'system-file',
json : false,
// log which stores all the errors
filename: './test.log',
json: true,
timestamp: true
})
]
})
你很亲密,努力尝试!