我发现自己经常在浏览器和node.js中执行此操作,而现在是时候我想出了一种正确的方法来做到这一点,而无需每次调试一段时间。重写console.log(或者一般的任何函数):有没有适当的方法来做到这一点?
这就是我目前的工作(这是Node.js的):
var log4js = require("log4js");
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('log.log'));
var logger = log4js.getLogger();
console.log = function() {
logger.debug.apply(logger, Array.prototype.slice.call(arguments));
};
这基本上是一个猴子补丁采取console.log
更改代码,并把它变成正确的日志代码。
我不确定这是否合适或完全asinine。
从概念上讲,我强制将发送到console.log的参数存入数组,然后传递给apply
。所有这些都是为了解决这个事实,我不知道如何在JS中声明一个可变参数函数。 (也许这是这样做的标准方法)。
或许console.log = logger.debug
可以达到同样的效果。哦,我想知道我怎么能通过论据。
例如,有不会在浏览器无论出于何种原因工作(但确实在节点)这一类的某种东西:
var l = console.log;
l('hello');
当然,这是不与重写console.log相同,这只是为了缩短它的名称,但仍然如此。
啊,我真的意识到这里有什么问题:这会起作用。
l.call(console, 'hello');
这意味着它只是缺少一点finagling与this
。
如果您仍然在寻找这个问题的实际问题,请看上面的斜体。