Сохраните файл console.log в Chrome в файл

173

Кто-нибудь знает способ сохранить вывод console.log в Chrome в файл? Или как скопировать текст из консоли?

Допустим, вы провели несколько часов функциональных тестов и получили тысячи строк вывода console.log в Chrome. Как сохранить или экспортировать?

eeejay
источник

Ответы:

98

Мне нужно было сделать то же самое, и вот решение, которое я нашел:

  1. Включите ведение журнала из командной строки, используя флаги:

    --enable-logging --v=1

    Это регистрирует все, что делает Chrome внутри, но также и все console.log()сообщения. Файл журнала называется chrome_debug.logи находится в User Data Directory.

  2. Фильтруйте файл журнала, который вы получаете для строк CONSOLE(\d+).

Обратите внимание, что журналы консоли не отображаются с --incognito.

Валид Абдулла
источник
3
кажется, он не работает на моем Mac OS, есть внутренние журналы, но нет Console.log ...
Nico
7
Это не сохраняет информацию console.log в файл журнала. В Windows 8.
кодерама
4
На Mac я нашел файл журнала в ~ / Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar
2
Это все еще работает для меня на OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1с сохраненным журналом~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb
3
Я не получаю ничего, кроме внутренних журналов Chrome. Мои console.log()строки нигде в этом файле. У кого-нибудь есть решение для этого?
xandermonkey
187

Хорошие новости

Инструменты разработчика Chrome теперь позволяют сохранять исходные данные консоли в файл

  1. Откройте консоль
  2. Щелкните правой кнопкой мыши
  3. Выберите «Сохранить как ...»

сохранить консоль в файл

Инструкции для разработчиков Chrome здесь .

adardesign
источник
3
Это можно сделать с помощью сочетания клавиш или запустив команду на консоли?
Сартак Сингхал
1
Вот список всех ярлыков devTools developer.chrome.com/devtools/docs/shortcuts
adardesign
11
Похоже, это не копирует трассировку стека
Michael
2
Можете ли вы снова открыть этот файл в консоли? Если да, то как ты так?
Махати Вемпати
7
Обратите внимание, что это не будет расширять объекты - оно все равно будет печатать большие объекты в их усеченной форме, например {a: 1, b: 2, c: 3, ...}.
Гален Лонг
29

Существует плагин с открытым исходным кодом javascript, который делает именно это, но для любого браузера - debugout.js

Debugout.js записывает и сохраняет console.logs, чтобы ваше приложение могло получить к ним доступ. Полное раскрытие, я написал это. Он соответствующим образом форматирует различные типы, может обрабатывать вложенные объекты и массивы, а также может дополнительно ставить отметку времени рядом с каждым журналом. Вы также можете переключать live-logging в одном месте, без необходимости удалять все ваши операторы logging.

inorganik
источник
4
Для справки, хотя это выглядит как отличный инструмент, он не будет захватывать выходные данные из браузера, например, когда происходит сбой загрузки изображения, или другие выходные данные встроенной консоли, и для этого требуется, чтобы вы переписывали свои операторы журнала, используя специальный синтаксис.
Лукус
@Lukus, конечно, он не будет захватывать выходные данные браузера (для этого понадобится патч обезьяны), но особого синтаксиса не требуется. передать те же аргументы, что и console.log
inorganik
1
@Inorganik Я искал способ для тестов селена, чтобы захватить вывод консоли, но он будет использоваться для службы тестирования, поэтому у нас нет контроля над сайтами пользователя. Я думаю, что ваш инструмент классный, но он потребует от пользователя переписать свои существующие операторы console.log как bugout.log, что я и имел в виду под специальным синтаксисом. Похоже, что пока нет кросс-браузерного способа сделать это.
Лукус
Нет, у нас это не сработает. Нам нужно сохранить журнал результатов тестирования сложного веб-сайта с большим количеством сторонних скриптов, которые работают на разных доменах, и мы не можем изменить большинство из них.
Майк Кескинов
23

Я нашел отличный и простой способ для этого.

  1. В консоли - щелкните правой кнопкой мыши консольный зарегистрированный объект

  2. Нажмите «Сохранить как глобальную переменную»

  3. Смотрите имя новой переменной - например, это variableName1

  4. Введите в консоли: JSON.stringify (variableName1)

  5. Скопируйте содержимое переменной строки: например, {"a": 1, "b": 2, "c": 3}

введите описание изображения здесь

  1. Зайдите в онлайн-редактор JSON: например, https://jsoneditoronline.org/

введите описание изображения здесь

скомбинировать
источник
1
Кажется неуклюжим на поверхности, но это работает довольно хорошо. В более поздних версиях внизу вывода есть кнопка «Копировать». Я просто нажимаю на это, затем получаю небольшой скрипт, который сохраняет буфер обмена в виде файла .json и открывается в Visual Studio, который очень удобочитаем. Единственное изменение - я делаю JSON.stringify (temp1, null, 2), чтобы его было легче читать. Прием ниже, чтобы сохранить консоль, работает хорошо.
Уэйд Хэтлер
8

Для лучшего файла журнала (без глупостей Chrome-debug) используйте:

--enable-logging --log-level=0

вместо --v=1которого просто слишком много информации.

Он по-прежнему будет отображать ошибки и предупреждения, которые вы обычно видите в консоли Chrome.

обновление 18 мая 2020 года: На самом деле, я думаю, что это больше не так. Я не мог найти сообщения консоли в пределах этого уровня ведения журнала.

JohnP2
источник
7

Это может или не может быть полезно, но в Windows вы можете прочитать журнал консоли, используя Event Tracing для Windows

http://msdn.microsoft.com/en-us/library/ms751538.aspx

Наши интеграционные тесты выполняются в .NET, поэтому я использую этот метод для добавления журнала консоли в наш тестовый вывод. Я сделал пример консольного проекта для демонстрации здесь: https://github.com/jkells/chrome-trace

--enable-logging --v = 1 не работает в последней версии Chrome.

Джаред Келлс
источник
3

Много хороших ответов, но почему бы просто не использовать JSON.stringify (your_variable)? Затем возьмите содержимое с помощью копирования и вставки (удалите внешние кавычки). Я также разместил этот же ответ по адресу: Как сохранить вывод файла console.log (объекта) в файл?

user1889992
источник
1
Для вопросов о « Uncaught TypeError: Преобразование круговой структуры в JSON » , возможно, это могло бы помочь.
KtX2SkD
2

Существует еще один инструмент с открытым исходным кодом, который позволяет сохранить все console.logвыходные данные в файл на вашем сервере - JS LogFlush (plug!).

JS LogFlush - это интегрированное решение для ведения журнала JavaScript, которое включает в себя:

  • кросс-браузерная замена консоли.log без пользовательского интерфейса - на стороне клиента.
  • система хранения журналов - на стороне сервера.

демонстрация

самый отдаленный
источник
2

Если вы используете сервер Apache на своем локальном хосте (не делайте этого на производственном сервере), вы также можете публиковать результаты в сценарий, а не записывать его в консоль.

Таким образом, вместо console.log, вы можете написать:

JSONP('http://localhost/save.php', {fn: 'filename.txt', data: json});

Тогда save.phpможете сделать это

<?php

 $fn = $_REQUEST['fn'];
 $data = $_REQUEST['data'];

 file_put_contents("path/$fn", $data);
supersan
источник
1
Я искренне надеюсь, что никто никогда не загрузит это на сервер в производстве 🙁. Это связано с опасностью для сервера.
Дэйв Макинтош
Разве вы не читали первую строку: «Если вы используете сервер Apache на своем локальном хосте»?
supersan
Ваш отрицательный голос за мои посты не оправдан, потому что было бы невероятно глупо для кого-то запускать производственный сервер на "localhost" (где JSONP запрашивает данные постов).
supersan
Я никогда не голосовал против вашего ответа, я просто указал на опасность, которую представляет этот скрипт, если когда-либо будет загружен на сервер, доступный для общественности.
Дэйв Макинтош
1

В Linux (по крайней мере) вы можете установить CHROME_LOG_FILE в среде, чтобы chrome записывал журнал активности консоли в указанный файл при каждом запуске. Журнал перезаписывается при каждом запуске Chrome. Таким образом, если у вас есть автоматический сеанс, который запускает Chrome, вам не нужно менять способ запуска Chrome, и после завершения сеанса ведется журнал.

экспорт CHROME_LOG_FILE = chrome.log

DrChandra
источник
0

В наши дни это очень просто - щелкните правой кнопкой мыши любой элемент, отображаемый в журнале консоли, выберите «Сохранить как» и сохраните весь вывод журнала в файл на вашем компьютере.

brianlmerritt
источник
0

другие решения в этой теме не работали на моем Mac. Вот регистратор, который периодически сохраняет строковое представление, используя ajax. используйте его console.saveвместоconsole.log

var logFileString="";
var maxLogLength=1024*128;

console.save=function(){
  var logArgs={};

  for(var i=0; i<arguments.length; i++) logArgs['arg'+i]=arguments[i];
  console.log(logArgs);

  // keep a string representation of every log
  logFileString+=JSON.stringify(logArgs,null,2)+'\n';

  // save the string representation when it gets big
  if(logFileString.length>maxLogLength){
    // send a copy in case race conditions change it mid-save
    saveLog(logFileString);
    logFileString="";
  }
};

в зависимости от того, что вам нужно, вы можете сохранить эту строку или просто console.logее и скопировать и вставить. Вот вам Ajax, если вы хотите сохранить его:

function saveLog(data){
  // do some ajax stuff with data.
  var xhttp = new XMLHttpRequest();

  xhttp.onreadystatechange = function(){
    if (this.readyState == 4 && this.status == 200) {}
  }

  xhttp.open("POST", 'saveLog.php', true);
  xhttp.send(data);
}

saveLog.phpследует добавить данные в файл журнала где - нибудь. Мне не нужна эта часть, поэтому я не включаю ее здесь. :)

https://www.google.com/search?q=php+append+to+log

джайа
источник