温斯顿记录器没有序列化 mongodb.ObjectID
winston logger not serializing mongodb.ObjectID
我想最终放弃 console.log 作为日志系统,并一直在研究 winston 和 bunyan。我对 winston 有点偏爱,因为现在我想要人类可读的 longentries 日志,而 bunyan 对于所有额外的字段来说有点太啰嗦了。
winston 很棒,只是它不能正确序列化 mongo 数据库 ID。
如果我这样做:
var ObjectId = require('mongodb').ObjectID;
var winston = require('winston');
winston.info(new ObjectId());
这是写入标准输出的内容:
info: _bsontype=ObjectID, id=Tø½þjÍrßgK
有时我只想将整个 mongoose 文档转储到日志中。我不想在所有对象 ID 上调用 .toString()?
有没有人能够在 winston 中解决这个有问题的场景?
您要找的很可能是格式说明符。
你可以这样做:
winston.info('%j', new ObjectId());
您可以在此处阅读格式说明符 http://nodejs.org/api/util.html#util_util_format_format
最后,我将 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])
});
我想最终放弃 console.log 作为日志系统,并一直在研究 winston 和 bunyan。我对 winston 有点偏爱,因为现在我想要人类可读的 longentries 日志,而 bunyan 对于所有额外的字段来说有点太啰嗦了。
winston 很棒,只是它不能正确序列化 mongo 数据库 ID。
如果我这样做:
var ObjectId = require('mongodb').ObjectID;
var winston = require('winston');
winston.info(new ObjectId());
这是写入标准输出的内容:
info: _bsontype=ObjectID, id=Tø½þjÍrßgK
有时我只想将整个 mongoose 文档转储到日志中。我不想在所有对象 ID 上调用 .toString()?
有没有人能够在 winston 中解决这个有问题的场景?
您要找的很可能是格式说明符。
你可以这样做:
winston.info('%j', new ObjectId());
您可以在此处阅读格式说明符 http://nodejs.org/api/util.html#util_util_format_format
最后,我将 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])
});