2013-05-02 74 views
4

當我通過winston傳遞元數據時,快捷方式winston.info方法未傳遞元數據。winston.js 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 

我期望兩次調用打印出來的元數據?

通過溫斯頓代碼挖看起來它動態地生成用於每個級別(「信息」,「調試」,「錯誤」)的快捷功能,並且試圖處理額外的元數據參數:

// 
// ### 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 
    // e.g. 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; 
}; 
+0

從文檔和代碼看,它看起來不像'info()'期待第二個參數。我會堅持'log('info'...)'。 – 2013-05-02 23:27:41

回答

3

我認爲這很可能是由於winston v0.7.1中的一個迴歸。

鑑於此輸入:

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,以反映迴歸,接受PR之前。