Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自定义/装饰Node.js下的console.log_Javascript_Node.js_Console.log - Fatal编程技术网

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获取指定数量的参数。