Збережіть console.log у Chrome у файл


173

Хтось знає спосіб зберегти вихідний файл console.log в Chrome у файл? Або як скопіювати текст з консолі?

Скажімо, ви працюєте за кілька годин функціональних тестів, і у вас є тисячі ліній виводу console.log в Chrome. Як зберегти його чи експортувати?


Відповіді:


98

Мені потрібно було зробити те ж саме, і це рішення, яке я знайшов:

  1. Увімкнути ведення журналу з командного рядка за допомогою прапорів:

    --enable-logging --v=1

    Це записує все, що Chrome робить внутрішньо, але він також записує всі console.log()повідомлення. Файл журналу викликається chrome_debug.logі знаходиться в User Data Directory.

  2. Фільтруйте файл журналу, який ви отримуєте для рядків CONSOLE(\d+).

Зауважте, що журнали консолі не відображаються із --incognito.


3
здається, він не працює на моєму mac os, є внутрішні журнали, але немає Console.log ...
Ніко

7
Це не зберігає інформацію console.log у файлі журналу. У Windows 8.
кодерама

4
На Mac я знайшов файл журналу в ~ / Бібліотека / Підтримка програм / 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
Я не отримую нічого, крім внутрішніх хромованих колод. Мої console.log()рядки ніде в цьому файлі немає. Хтось має виправити це?
xandermonkey

187

Гарні новини

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

  1. Відкрийте консоль
  2. Клацніть правою кнопкою миші
  3. Виберіть "зберегти як .."

зберегти консоль у файл

Тут інструкції для розробника Chrome .


3
Це можна зробити за допомогою комбінації клавіш або запуску команди на консолі?
Сартак Сінгал

1
Ось список усіх ярликів devTools developer.chrome.com/devtools/docs/shortcuts
adardesign

11
Схоже, це не копіює слід стека
Майкл

2
Чи можете ви знову відкрити цей файл у консолі? Якщо так, то як вам так?
Махаті Вемпаті

7
Зауважте, що це не розширюватиме об’єкти - воно все одно буде друкувати великі об’єкти у їх усіченому вигляді, наприклад {a: 1, b: 2, c: 3, ...}.
Гален Лонг

29

Є плагін з відкритим кодом javascript, який робить саме це, але для будь-якого браузера - debugout.js

Debugout.js записує та зберігає console.logs, щоб програма могла отримати доступ до них. Повне розкриття, я це написав. Він належним чином форматує різні типи, може обробляти вкладені об'єкти та масиви, а також може додатково ставити часову позначку поруч із кожним журналом. Ви також можете перемикати журнали в реальному часі в одному місці і без необхідності видаляти всі ваші оператори журналу.


4
Для довідки, хоча це виглядає як чудовий інструмент, він не буде фіксувати вихід із браузера, як, наприклад, коли завантаження зображення виходить з ладу або іншим вбудованим консольним висновком, і потрібно переписати записи журналу за допомогою спеціального синтаксису.
Лукус

@Lukus, безумовно, не буде захоплювати вихід браузера (для цього вам знадобиться патч мавпи), але немає спеціального синтаксису. передайте ті ж аргументи, що і в console.log
inorganik

1
@Inorganik Я шукав спосіб тестування селену для отримання виходу з консолі, але він буде використаний для тестування, щоб ми не мали контролю над веб-сайтами користувача. Я думаю, що ваш інструмент класний, але він зажадає від користувача переписати свої існуючі консолі.log заяви як bugout.log, ось що я мав на увазі під спеціальним синтаксисом. Це здається, що цього разу не існує способу крос-браузера.
Лукус

Ні, це не буде працювати для нас. Нам потрібно зберегти журнал результатів тестування складного веб-сайту з великою кількістю сторонніх скриптів, який працює в різних областях, і ми не можемо змінити більшість з них.
Майк Кескінов

23

Я знайшов для цього чудовий і простий спосіб.

  1. У консолі - клацніть правою кнопкою миші на об'єкт, який зареєструвався

  2. Клацніть на "Зберегти як глобальну змінну"

  3. Дивіться назву нової змінної - наприклад, вона є змінноюName1

  4. Введіть консоль: JSON.stringify (зміннийName1)

  5. Скопіюйте змістовий вміст рядка: напр. {"A": 1, "b": 2, "c": 3}

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

  1. Перейдіть до якогось онлайн-редактора JSON: напр. Https://jsoneditoronline.org/

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


1
Здається, незграбно на поверхні, але це працює досить добре. У пізніших версіях внизу виводу є кнопка «Копіювати». Я просто натискаю це, а потім маю невеликий скрипт, який зберігає буфер обміну як файл .json і відкривається у Visual Studio, який дуже читабельний. Єдина зміна - це я зробити JSON.stringify (temp1, null, 2), щоб полегшити читання. Нижче наведена хитрість збереження консолі.
Уейд Хатлер

8

Для кращого файлу журналу (без дурників Chrome-налагодження) використовуйте:

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

замість --v=1чого просто занадто багато інформації.

Він все ще надаватиме помилки та застереження, як ви зазвичай бачите на консолі Chrome.

оновлення 18 травня 2020 року: Насправді, я думаю, це вже не так. Не вдалося знайти повідомлення консолі в межах будь-якого рівня реєстрації.


7

Це може бути або не корисно, але в Windows ви можете прочитати журнал консолі за допомогою Tracing Event for 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 (об'єкт) у файл?


1
Питання про " Uncaught TypeError: Перетворення кругової структури в JSON " , можливо, це може допомогти.
KtX2SkD

2

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

JS LogFlush - це інтегроване рішення для журналювання JavaScript, яке включає:

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

Демо


2

Якщо ви працюєте з сервером Apache на своєму localhost (не робіть цього на виробничому сервері), ви також можете опублікувати результати в сценарій, а не писати на консоль.

Тож замість цього 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);

1
Я справді сподіваюся, що ніхто ніколи не завантажує це на сервер у виробництві 🙁. Це створюється небезпекою для сервера.
Дейв Макінтош

Ви не читали перший рядок: "Якщо ви працюєте на сервері Apache на своєму localhost"?
Суперсан

Ваше голосування за мою посаду не є виправданим, оскільки це було б неймовірно нерозумно, щоб хтось запускав виробничий сервер на "localhost" (де JSONP вимагає публікації даних).
Суперсан

Я ніколи не проголосував вашу відповідь, я просто вказав на небезпеку, яку цей сценарій становить, якщо він коли-небудь завантажений на сервер, доступний для громадськості.
Дейв Макінтош

1

У Linux (принаймні) ви можете встановити CHROME_LOG_FILE в оточенні, щоб хром писав журнал активності консолі у названий файл кожного разу, коли він запускається. Журнал перезаписується кожного разу, коли запускається хром. Таким чином, якщо у вас є автоматизований сеанс, який запускає хром, вам не потрібно змінювати спосіб запуску хрому, а журнал є там після закінчення сеансу.

експортувати CHROME_LOG_FILE = chrome.log


0

У наші дні це дуже просто - клацніть правою кнопкою миші будь-який елемент, що відображається в журналі консолі, і виберіть "Зберегти як" та збережіть весь вихідний файл у файл на вашому комп'ютері.


0

інші рішення в цій темі не працювали на моєму комп'ютері. Ось реєстратор, який зберігає представлення рядків з перервами, використовуючи 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його та скопіювати та вставити. ось аякс для вас, якщо ви хочете зберегти його:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.