【问题标题】:winston logger not serializing mongodb.ObjectID温斯顿记录器没有序列化 mongodb.ObjectID
【发布时间】:2015-05-07 09:07:38
【问题描述】:

我想最终摆脱作为日志系统的 console.log 并且一直在研究 winston 和 bunyan。我对 winston 有一点偏好,因为现在我希望在 longentries 中记录人类可读的日志,而 bunyan 对于所有额外的字段来说有点太健谈了。

winston 很棒,只是它不能正确序列化 mongo 数据库 ID。

如果我这样做:

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

这是写入标准输出的内容:

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

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

有没有人能够在温斯顿解决这个有问题的场景?

【问题讨论】:

    标签: javascript node.js mongodb mongoose winston


    【解决方案1】:

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

    你可以这样做:

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

    你可以在这里阅读格式说明符http://nodejs.org/api/util.html#util_util_format_format

    【讨论】:

      【解决方案2】:

      最后,我将 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])
      });
      

      【讨论】:

        猜你喜欢
        • 2012-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-19
        • 2017-03-23
        • 1970-01-01
        • 2019-05-13
        • 1970-01-01
        相关资源
        最近更新 更多