Javascript winston.js info方法未传递元数据
当我通过winston传递元数据时,快捷方式winston.info方法不会传递元数据Javascript winston.js info方法未传递元数据,javascript,node.js,logging,winston,Javascript,Node.js,Logging,Winston,当我通过winston传递元数据时,快捷方式winston.info方法不会传递元数据 var winston = require('winston'); winston.info("winston with metadata", {cluster: "bar"}); winston.log("info", "winston with metadata", {cluster: "baz"}); 输出: info: winston with metadata info: winston wit
var winston = require('winston');
winston.info("winston with metadata", {cluster: "bar"});
winston.log("info", "winston with metadata", {cluster: "baz"});
输出:
info: winston with metadata
info: winston with metadata cluster=baz
我希望两个电话都能打印出元数据
在winston代码中,它似乎为每个级别动态生成快捷方式函数(“info”、“debug”、“error”),并尝试处理其他元数据参数:
//
// ### 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;
};
//
//####函数设置级别(目标、过去、当前)
//####@target{Object}要设置级别的对象。
//#####@过去{Object}在目标上设置的先前级别。
//####@current{Object}要在目标上设置的当前级别。
//在每个级别的目标对象上创建函数
//以目前的水平。如果定义了“过去”,请删除函数
//对于每一个级别。
//
exports.setLevels=函数(目标、过去、当前、isDefault){
如果(过去){
Object.keys(过去).forEach(函数(级别){
删除目标[级别];
});
}
target.levels=当前| | config.npm.levels;
if(目标.padLevels){
target.levelLength=exports.longeselement(Object.keys(target.levels));
}
//
//为每个日志级别定义原型方法
//例如target.log('info',msg)target.info(msg)
//
Object.key(target.levels).forEach(function(level){
目标[级别]=功能(消息){
var args=Array.prototype.slice.call(参数,1),
callback=args.pop(),
ltype=回调的类型,
meta=args.length?args:null;
如果(ltype!==“函数”){
if(meta&<ype!==“未定义”){
meta.push(回调);
}
callback=null;
}
如果(元){
meta=(meta.length我认为这很可能是由于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
在接受文档中的PR.和代码之前,我已经进行了更新以反映回归。它看起来不像info()
需要第二个参数。我会坚持使用log('info')
。