winston logger没有序列化mongodb.ObjectID

时间:2015-03-05 20:41:05

标签: javascript node.js mongodb mongoose winston

我想最终离开console.log作为日志记录系统,并且一直在调查winston和bunyan。我对winston略有偏好,因为现在我想要人类可读的日志,并且bunyan对于所有额外的字段来说有点过于健谈。

除了没有正确序列化mongo数据库ID之外,winston很棒。

如果我这样做:

var ObjectId = require('mongodb').ObjectID;
var winston = require('winston');
winston.info(new ObjectId());

这是写入stdout的内容:

  

info:_bsontype = ObjectID,id =Tø½þjÍrßgK

有时我只想将整个mongoose文档转储到日志中。我不想在所有对象ID上调用.toString()吗?

有没有人能够在winston中解决这个有问题的场景?

2 个答案:

答案 0 :(得分:4)

您正在寻找的是最有可能的格式说明符。

您可以这样做:

winston.info('%j', new ObjectId());

您可以在此处阅读格式说明符http://nodejs.org/api/util.html#util_util_format_format

答案 1 :(得分:0)

最后,我将winston日志记录方法包装在一个函数中,该函数只是将带有默认格式的节点格式实用程序应用于所有参数。到目前为止是一种享受:

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


var fixWinstonParams = function (fn) {
    return function () {
        for (var i = 0; i < arguments.length; i++) {
            arguments[i] = util.format( arguments[i]);
        }
        return fn.apply(this, arguments);
    };
};


['info', 'error', 'debug', 'warn'].map(function(each){
    winston[each] = fixWinstonParams( winston[each])
});