NodeJS - 带有漂亮JSON的Winston文件传输

时间:2015-12-16 12:41:01

标签: json node.js

我正在使用Winston记录到文件。我想以人类可读的方式登录文件,并使用换行符和标签格式化JSON对象。

我正在尝试使用formatter功能。

var winston = require('winston');
var moment = require('moment');

function formatter(args) {
    var date = moment().format("D/MM/YYYY hh:mm:ss");
    var msg = date + ' - ' + args.level + ' - ' + args.message + ' - ' + JSON.stringify(args.meta);
    return msg;
}

var logger = new (winston.Logger)({
    transports: [
        new (winston.transports.File)({
            level: 'silly',
            filename: __dirname + '/logs/test.log',
            json: false,
            formatter: formatter
        })
    ]
});

logger.log('info', 'info 123', { some: 'json' });

输出:

16/12/2015 12:23:44 - info - info 123 - {"some":"json"}

如果我不使用JSON.stringify,我只会获得[object Object]

我想要的是:

16/12/2015 12:23:44 - info - info 123 - 
{
    "some":"json"
}

Winston能以某种方式开箱即用吗?

...或者是否有人编写了一个函数,在字符串中找到{}并添加换行符和标签..?

1 个答案:

答案 0 :(得分:2)

喜欢这个吗?

var msg = date         + ' - '   + 
          args.level   + ' - '   + 
          args.message + ' - \n' + JSON.stringify(args.meta, null, 2);