Получить историю консоли

Я хотел бы знать, есть ли способ в javascript для извлечения истории консоли.

То, что я имею в виду в истории консоли, - это то, что появляется в консоли разработчика. Например, я хотел бы напечатать на html-странице все ошибки, предупреждения, информацию и журнал, которые отображаются в моих инструментах dev, не открывая их.

Сообщите мне, если я не понимаю.

Ответ 1

У расширений Chrome был API для этого, experimental.devtools.console:

chrome.experimental.devtools.console.getMessages(function(messages) {  })

Этот API был удален.

Ответ 2

Я написал для этого кросс-браузерную библиотеку, называемую console.history. Он доступен на GitHub: https://git.io/console

Что библиотека в основном делает, это перехватить все вызовы console.[log/warn/error/debug/info] и сохранить их в массиве console.history. В качестве бонуса также добавляется полная трассировка стека.

Тестовый файл test.js содержит:

function outer() {
  inner();
}

function inner() {
  var array = [1,2,3];
  var object = {"foo": "bar", "key": "value"};
  console.warn("Something went wrong, but we're okay!", array, object);
}

outer();

Ввод в console.history будет:

{
  "type": "warn",
  "timestamp": "Thu, 01 Sep 2016 15:38:28 GMT",
  "arguments": {
    "0": "Something went wrong, but we're okay!",
    "1": [1, 2, 3],
    "2": {
      "foo": "bar",
      "key": "value"
    }
  },
  "stack": {
    "0": "at inner (http://localhost:1337/test/test.js:6:11)",
    "1": "at outer (http://localhost:1337/test/test.js:2:3)",
    "2": "at http://localhost:1337/test/test.js:9:1"
  }
}

Ответ 3

Невозможно получить данные консоли с помощью JavaScript. Только так вы сможете это сделать, в основном, захватить все функции консоли и сохранить копию, а также вызвать строки журнала по умолчанию.

Ответ 4

console.history = [];
var oldConsole = {};
for (var i in console) {
    if (typeof console[i] == 'function') {
        oldConsole[i] = console[i];
        var strr = '(function(){\
            console.history.push({func:\'' + i + '\',args : Array.prototype.slice.call(arguments)});\
            oldConsole[\'' + i + '\'].apply(console, arguments);\
        })';
        console[i] = eval(strr);
    }
}

И затем используйте console.history для доступа к истории