如何在JavaScript中从Chrome的控制台读取


74

我想在我的应用程序中放置一个按钮,如果您按该按钮,它将获取写入控制台的所有内容并将其通过电子邮件发送给我(用于报告错误)。我知道我可以保留一个变量,并且每次执行console.log时都将消息追加到该变量,但是我试图将应用程序的内存消耗保持在较低水平,因此仅从应用程序中获取它会更有效。安慰。

有没有办法从javascript检索控制台消息?

谢谢



谢谢,这就是我的想法。我进行了一些搜索,但没有看到此帖子,感谢您指出
-Mike

谢谢,我之前使用过jsconsole.com进行远程调试,下次我对它进行调试时,我将向您的图书馆看一下
Mike

@Mike另一个很好的工具是weinre。我同时使用了weinre和jsconsole,并且我最喜欢weinre。
DontVoteMeDown

Answers:


94

你不能 控制台中的内容无法从JavaScript中读取。

您可以做的就是钩住console.log函数,以便在日志记录时进行存储:

console.stdlog = console.log.bind(console);
console.logs = [];
console.log = function(){
    console.logs.push(Array.from(arguments));
    console.stdlog.apply(console, arguments);
}

console.logs包含所有记录的内容。您可以随时通过清洁它console.logs.length = 0;

您仍然可以通过调用进行标准的非存储日志console.stdlog


如果您是从事此项目的唯一人员,则只需定义一个函数即可log,而不必输入太多内容。我将与它同步console.log按照这个答案,如果你与其他人合作(谁可能会或可能不熟悉你的方法。)
sotrh

3
@dystroy:嘿,只是好奇,有什么方法可以获取.js文件名和console.log调用原始文件的行号?
c00000fd 2014年

@ c00000fd我要做的一件事是在控制台输出中放入某种唯一标识符。我不会使用行号,因为它可以在编辑后轻松更改,但可以使用一些唯一的字符串来标识特定的console.log。然后,当您看到它时,可以在文本编辑器中轻松搜索。
凯瑟琳·奥斯本

@ c00000fd您可以抛出并捕获Error函数内部,然后从堆栈跟踪中解析出文件名和行。
JLRishe'3

旁注,您可以像Denys所说的那样覆盖console.log,或者可以覆盖console.error或console.exception以获取特定类型的消息。为我的当机记者工作,谢谢!
MingMan

18

获取所有控制台数据

如何读取js中的浏览器控制台错误?

如何在JavaScript中从Chrome的控制台读取

https://www.quora.com/How-do-I-read-console-window-errors-from-Chrome-using-JavaScript

日志

console.defaultLog = console.log.bind(console);
console.logs = [];
console.log = function(){
    // default &  console.log()
    console.defaultLog.apply(console, arguments);
    // new & array data
    console.logs.push(Array.from(arguments));
}

错误

console.defaultError = console.error.bind(console);
console.errors = [];
console.error = function(){
    // default &  console.error()
    console.defaultError.apply(console, arguments);
    // new & array data
    console.errors.push(Array.from(arguments));
}

警告

console.defaultWarn = console.warn.bind(console);
console.warns = [];
console.warn = function(){
    // default &  console.warn()
    console.defaultWarn.apply(console, arguments);
    // new & array data
    console.warns.push(Array.from(arguments));
}

调试

console.defaultDebug = console.debug.bind(console);
console.debugs = [];
console.debug = function(){
    // default &  console.debug()
    console.defaultDebug.apply(console, arguments);
    // new & array data
    console.debugs.push(Array.from(arguments));
}

很棒的console.log解决方案🚀–
xgqfrms

9

我已经使用这个代码在过去捕捉到所有控制台活动,并将其与存储类型时间戳console.everything发送回服务器用于诊断表格数据录入的问题。我在<head>元素中尽早运行此代码。

if (console.everything === undefined)
{
    console.everything = [];

    console.defaultLog = console.log.bind(console);
    console.log = function(){
        console.everything.push({"type":"log", "datetime":Date().toLocaleString(), "value":Array.from(arguments)});
        console.defaultLog.apply(console, arguments);
    }
    console.defaultError = console.error.bind(console);
    console.error = function(){
        console.everything.push({"type":"error", "datetime":Date().toLocaleString(), "value":Array.from(arguments)});
        console.defaultError.apply(console, arguments);
    }
    console.defaultWarn = console.warn.bind(console);
    console.warn = function(){
        console.everything.push({"type":"warn", "datetime":Date().toLocaleString(), "value":Array.from(arguments)});
        console.defaultWarn.apply(console, arguments);
    }
    console.defaultDebug = console.debug.bind(console);
    console.debug = function(){
        console.everything.push({"type":"debug", "datetime":Date().toLocaleString(), "value":Array.from(arguments)});
        console.defaultDebug.apply(console, arguments);
    }
}

如何再次将console.everything重置为undefined?我尝试这样做,这在我的应用程序中给了我错误。
Mohammed Ajmal

1

如果您正在研究vue.js,则可以执行以下操作:

data () {
    return {
        data: []
    }
},
created () {
    let current_log = console.log;

    console.log = msg => {
        if (msg !== undefined) this.data.push(msg);
        current_log.apply(null, arguments);
    }
}

来自控制台的所有日志将被捕获并存储在 data


current_log.apply(null ...帮助过我。thnx
Harkal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.