winston.js info方法不传递元数据

当我通过winston传递元数据时,快捷方式winston.info方法不会传递元数据。

var winston = require('winston'); winston.info("winston with metadata", {cluster: "bar"}); winston.log("info", "winston with metadata", {cluster: "baz"}); 

OUTPUT:

 info: winston with metadata info: winston with metadata cluster=baz 

我希望这两个调用打印出元数据?

通过winston代码挖掘,它看起来像dynamic生成每个级别的快捷function('信息','debugging','错误'),并尝试处理额外的元数据参数:

 // // ### function setLevels (target, past, current) // #### @target {Object} Object on which to set levels. // #### @past {Object} Previous levels set on target. // #### @current {Object} Current levels to set on target. // Create functions on the target objects for each level // in current.levels. If past is defined, remove functions // for each of those levels. // exports.setLevels = function (target, past, current, isDefault) { if (past) { Object.keys(past).forEach(function (level) { delete target[level]; }); } target.levels = current || config.npm.levels; if (target.padLevels) { target.levelLength = exports.longestElement(Object.keys(target.levels)); } // // Define prototype methods for each log level // eg target.log('info', msg) <=> target.info(msg) // Object.keys(target.levels).forEach(function (level) { target[level] = function (msg) { var args = Array.prototype.slice.call(arguments, 1), callback = args.pop(), ltype = typeof callback, meta = args.length ? args : null; if (ltype !== 'function') { if (meta && ltype !== 'undefined') { meta.push(callback); } callback = null; } if (meta) { meta = (meta.length <= 1 && meta.shift()) || meta; return callback ? target.log(level, msg, meta, callback) : target.log(level, msg, meta) } return callback ? target.log(level, msg, callback) : target.log(level, msg) }; }); return target; }; 

我认为这很可能是由于winston v0.7.1中的一个回归。

给出这个input:

 var winston = require("winston"); var logger = new winston.Logger({ levels: { debug: 0, info: 1, warn: 2, error: 3 }, transports: [ new winston.transports.Console({ level: 'debug', colorize: true }) ] }); console.log('Winston Version: ' + winston.version); console.log('\nProxy Methods\n'); logger.info("Hello world"); logger.warn("Hello world", { winston: { version: winston.version }}); console.log('\nDirect Access Methods\n') logger.log('info', "Hello world"); logger.log('warn', "Hello world", { version: winston.version }); 

你得到以下输出

 Winston Version: 0.6.2 Proxy Methods info: Hello world warn: Hello world version=0.6.2 Direct Access Methods info: Hello world warn: Hello world version=0.6.2 

与:

 Winston Version: 0.7.1 Proxy Methods info: Hello world warn: Hello world Direct Access Methods info: Hello world warn: Hello world version=0.7.1 

我已经更新了https://github.com/flatiron/winston/pull/246来反映回归,接受公关之前&#x3002;