Winston输出json而不是格式化字符串

时间:2018-04-23 13:55:06

标签: javascript node.js logging npm winston

我在我的应用中设置了一个简单的winston记录器,如下所示:

function logger(success, msg) {
    let now = new Date().toUTCString()
    let logger = new (winston.Logger)({
        transports: [
            new (winston.transports.File)({ 
                filename: 'log.log',
                timestamp: function() {
                    return new Date().toUTCString();
                },
                formatter: function(options) {
                    return `>>>>>>>>>> ${options.timestamp()} - ${options.level.toUpperCase} - ${options.message}`;
                }
            })
        ]
    });

    if (success) {
        logger.log('info', msg)
    } else {
        logger.log('error', msg)
    }
}

但它不是记录格式化的字符串,而是输出以下内容:

  

{"level":"error","message":"Nothing to upload","timestamp":"Mon, 23 Apr 2018 13:53:01 GMT"}

想法?我错过了什么吗? (当然是我)

1 个答案:

答案 0 :(得分:1)

正如您在File的winston文档中可以看到的那样,如果您不希望文件中的信息是JSON对象,则可以将属性json设置为false。 默认此属性为true

  

json:如果为true,则消息将记录为JSON(默认为true)。

您可以尝试更改代码:

function logger(success, msg) {
    let now = new Date().toUTCString()
    let logger = new (winston.Logger)({
        transports: [
            new (winston.transports.File)({ 
                filename: 'log.log',
                timestamp: function() {
                    return new Date().toUTCString();
                },
                json: false,
                formatter: function(options) {
                    return `>>>>>>>>>> ${options.timestamp()} - ${options.level.toUpperCase} - ${options.message}`;
                }
            })
        ]
    });

    if (success) {
        logger.log('info', msg)
    } else {
        logger.log('error', msg)
    }
}