我正在尝试用 Winston 覆盖 Nodejs 中的控制台。
for (var z in loggerSettings) {
console[z] = (function () {
var i = z + ''
, _backup = console[z];
return function () {
var utfs = arguments.length >= 2 ? util.format.apply(util, arguments) : arguments[0]
, coldex = 0;
if (true) logger[i == 'log' ? 'info' : i](utfs);
if (loggerSettings[i].console){
if ((coldex = utfs.indexOf(']') + 1) <= MAX_TAG_LENGTH)
_backup(utfs.substring(0, coldex)[i]['inverse'] + utfs.substring(coldex));
else _backup(utfs);
}
}
})();
}
这里var z
只是一个基本的console.log、console.info、console.warn 方法。问题是每个匿名函数的 z 都在变化。解决这个问题有点挑战性,但是 z 的范围似乎发生了变化,并且变量 z 在循环的每次迭代中并不完全坚持一个恒定值。Z 不想坚持自己的范围。