Javascript 自定义/装饰Node.js下的console.log
我想在Javascript 自定义/装饰Node.js下的console.log,javascript,node.js,console.log,Javascript,Node.js,Console.log,我想在Node.js下面装饰console.log的输出,就像下面的代码一样 var console = { log: function(text) { global.console.log('Test: ' + text); } }; console.log('custom console is here'); 输出: 测试:这里有定制控制台 但是,如果我删除变量控制台之前的变量 console = { log: function(text) {
Node.js
下面装饰console.log
的输出,就像下面的代码一样
var console = {
log: function(text) {
global.console.log('Test: ' + text);
}
};
console.log('custom console is here');
输出:
测试:这里有定制控制台
但是,如果我删除变量控制台
之前的变量
console = {
log: function(text) {
global.console.log('Test: ' + text);
}
};
console.log('custom console is here');
输出将是
这里有定制控制台
我知道当var
被删除时,控制台将成为全局变量。根据我的理解,它将覆盖全局.console
,但似乎不是为什么无法覆盖全局.console
?
第二个问题:有没有更好的自定义console.log的方法?
为什么无法覆盖全局.console
因为它是一个访问器属性(用于加载)。
尝试严格模式,您的作业将抛出
它可以通过使用重写,但这是一个非常糟糕的想法,因为许多模块都依赖于它
有没有更好的方法自定义控制台.log
不,最好使用模块本地的控制台
变量
当然,您可以改进您的实现,例如正确处理多个参数,成为实际的控制台实例(使用所有方法),或通过require(“my Console.js”)
提供,以便您可以在多个模块中使用它。如其他模块所述,重写console.log
函数不是一个好主意,因为许多模块都依赖它
除此之外,在代码中,您将console变量设置为一个全新的对象,该对象只有函数log
,该函数只能处理一个参数,而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
但是,如果您只是需要一个更好的调试日志,请尝试该包。我认为您必须将其明确定义为:global.console=..
,而不是console=..
1。如果需要更好的日志,请使用util.log。2.获取参数的方式不符合您的要求,您现在只能记录1个参数,而console.log获取指定数量的参数。