Customize/Decorate console.log 在 Node.js 下
Customize/Decorate console.log under Node.js
我想像下面的代码一样修饰 Node.js
下 console.log
的输出
var console = {
log: function(text) {
global.console.log('Test: ' + text);
}
};
console.log('custom console is here');
输出:
Test: custom console is here
但是,如果我删除变量 console
之前的 var
,
console = {
log: function(text) {
global.console.log('Test: ' + text);
}
};
console.log('custom console is here');
输出将是
custom console is here
我知道删除var
后console
会变成全局变量。根据我的理解,它将覆盖 global.console
,但似乎不会。 为什么 global.console
不能被覆盖?
第二个问题:有没有更好的方法自定义console.log?
Why the global.console
cannot be override?
因为它是 属性 和 only a getter (which loads the console
module) 的访问器。
试试严格模式,你的作业就会抛出。
可以使用 Object.defineProperty
覆盖它,但这是一个非常糟糕的主意,因为许多模块都依赖于它。
Is there any better way to custom console.log
?
不,模块本地的 console
变量似乎是最好的主意。
当然你可以改进你的实现,例如正确处理多个参数,成为一个实际的 Console
实例(具有所有方法),或者通过 require("my-console.js")
可用,以便您可以在多个模块中使用它。
正如其他人提到的,重写 console.log
函数不是一个好主意,因为许多模块都依赖于它。
除此之外,在您的代码中,您将控制台变量设置为一个只有函数 log
的全新对象,该函数只能处理 1 个参数,而 console.log
可以处理多个参数。
如果您真的想重写该函数,请尝试这样的操作:
function decorateLog(string) {
var originalFunc = console.log;
console.log = function(){
originalFunc.apply(console, [string].concat([].slice.call(arguments)))
}
}
decorateLog('Test:')
console.log('custom console is here'); //=> Test: custom console is here
console.log('foo', 'bar'); //=> Test: foo bar
但如果您只需要更好的调试日志,请尝试 debug 包。
我想像下面的代码一样修饰 Node.js
下 console.log
的输出
var console = {
log: function(text) {
global.console.log('Test: ' + text);
}
};
console.log('custom console is here');
输出:
Test: custom console is here
但是,如果我删除变量 console
之前的 var
,
console = {
log: function(text) {
global.console.log('Test: ' + text);
}
};
console.log('custom console is here');
输出将是
custom console is here
我知道删除var
后console
会变成全局变量。根据我的理解,它将覆盖 global.console
,但似乎不会。 为什么 global.console
不能被覆盖?
第二个问题:有没有更好的方法自定义console.log?
Why the
global.console
cannot be override?
因为它是 属性 和 only a getter (which loads the console
module) 的访问器。
试试严格模式,你的作业就会抛出。
可以使用 Object.defineProperty
覆盖它,但这是一个非常糟糕的主意,因为许多模块都依赖于它。
Is there any better way to custom
console.log
?
不,模块本地的 console
变量似乎是最好的主意。
当然你可以改进你的实现,例如正确处理多个参数,成为一个实际的 Console
实例(具有所有方法),或者通过 require("my-console.js")
可用,以便您可以在多个模块中使用它。
正如其他人提到的,重写 console.log
函数不是一个好主意,因为许多模块都依赖于它。
除此之外,在您的代码中,您将控制台变量设置为一个只有函数 log
的全新对象,该函数只能处理 1 个参数,而 console.log
可以处理多个参数。
如果您真的想重写该函数,请尝试这样的操作:
function decorateLog(string) {
var originalFunc = console.log;
console.log = function(){
originalFunc.apply(console, [string].concat([].slice.call(arguments)))
}
}
decorateLog('Test:')
console.log('custom console is here'); //=> Test: custom console is here
console.log('foo', 'bar'); //=> Test: foo bar
但如果您只需要更好的调试日志,请尝试 debug 包。