我想扩展“console.log”功能以在其输出中添加额外信息 - 但我不想影响浏览器在控制台窗口中生成的脚本名称/行号信息。看看如果我创建自己的实现,我会得到无用的跟踪信息,我是否应该定位该代码区域...(它们都链接到日志实现,而不是导致日志消息的实际脚本)
基本上,我的应用程序是一个非常可插拔的基础架构,任何日志输出都可能出现在任意数量的帧中。 因此,我希望每条日志消息都在日志消息的开头包含一个特殊的唯一标识符。
我尝试用自己的方法替换 console.log 方法,但 chrome 提示
未捕获的类型错误:非法调用
这就是我重写它的方式
var orig = console.log;
console.log = function( message )
{
orig( (window == top ? '[root]' : '[' + window.name + ']') + ': ' + message );
}
有什么想法吗?
[编辑] 注意:修复“非法调用”问题后,文件名/行号似乎仍被覆盖“污染”...
[编辑] 看起来一般的答案是 - 不 - 尽管有一些令人困惑的鹅追逐,但在当前版本的浏览器中无法实现所需的功能。
最佳答案
是的,可以在不弄乱日志调用的原始行号的情况下添加信息。这里的其他一些答案很接近,但诀窍是让您的自定义日志记录方法返回修改后的记录器。下面是一个使用上下文变体的简单示例,该示例仅经过适度测试。
log = function() {
var context = "My Descriptive Logger Prefix:";
return Function.prototype.bind.call(console.log, console, context);
}();
这可以用于:
log("A log message...");
这是一个 jsfiddle:http://jsfiddle.net/qprro98v/
人们可以很容易地发挥创意并传入上下文变量,并从函数定义中删除自动执行的括号。即 log("DEBUG:")("A debug message"), log("INFO:")("Here is some info"), 等
该函数唯一真正重要的部分(关于行号)是它返回记录器。
关于javascript - 在不影响日志行的情况下扩展 console.log,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9559725/