javascript - 在不影响日志行的情况下扩展 console.log

标签 javascript google-chrome

我想扩展“console.log”功能以在其输出中添加额外信息 - 但我不想影响浏览器在控制台窗口中生成的脚本名称/行号信息。看看如果我创建自己的实现,我会得到无用的跟踪信息,我是否应该定位该代码区域...(它们都链接到日志实现,而不是导致日志消息的实际脚本)

enter image description here

基本上,我的应用程序是一个非常可插拔的基础架构,任何日志输出都可能出现在任意数量的帧中。 因此,我希望每条日志消息都在日志​​消息的开头包含一个特殊的唯一标识符。

我尝试用自己的方法替换 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/

相关文章:

google-chrome - .net的Google Chrome控件

javascript - ion-item onclick 在另一个 div 中显示详细信息

javascript - SVG 上的 .mouseover() 事件表现得很奇怪

Javascript - 无需等待页面加载结束即可设置 DIV 大小

javascript - NodeWebkit 中的 XMLHttpRequest,状态 = 0

javascript - Chrome 无法检测图像尺寸

javascript - 奇怪的 Express Jade View 缓存行为

javascript - AngularJS 中的嵌套模块

google-chrome - 在后台选项卡中打开链接时保持 chrome 扩展弹出窗口打开

html - 信用卡号的正确输入类型是什么?