Как сохранить выходные данные console.log (объекта) в файл?


240

Я пытался использовать JSON.stringify(object), но это не влияет на всю структуру и иерархию.

С другой стороны console.log(object), но я не могу это сохранить.

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



Вы пытаетесь сохранить console.log из браузера для разработки? Это может помочь, если вы объясните, какова ваша конечная цель.
— Трэвис

1
@MichaelS Я не нашел объект в файле журнала.
— Эдуард Флоринеску

@travis Я хочу экспортировать объект в JSON, но всю иерархию, а также его свойства и свойства его свойств. Я хочу практически получить «интерфейс» объекта, кроме реализации функций.
— Эдуард Флоринеску

2
@MichaelS, эти вопросы о сохранении всего журнала, этот вопрос о сохранении одного объекта. Они отличаются от моей точки зрения.
— Джеймс МакМэхон

Ответы:


307

Обновление: теперь вы можете просто щелкнуть правой кнопкой мыши

Щелкните правой кнопкой мыши> Сохранить как на панели консоли, чтобы сохранить зарегистрированные сообщения в файл.

Оригинальный ответ:

Вы можете использовать этот фрагмент devtools, показанный ниже, чтобы создать метод console.save. Он создает FileBlob из входных данных, а затем автоматически загружает его.

(function(console){

console.save = function(data, filename){

    if(!data) {
        console.error('Console.save: No data')
        return;
    }

    if(!filename) filename = 'console.json'

    if(typeof data === "object"){
        data = JSON.stringify(data, undefined, 4)
    }

    var blob = new Blob([data], {type: 'text/json'}),
        e    = document.createEvent('MouseEvents'),
        a    = document.createElement('a')

    a.download = filename
    a.href = window.URL.createObjectURL(blob)
    a.dataset.downloadurl =  ['text/json', a.download, a.href].join(':')
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    a.dispatchEvent(e)
 }
})(console)

Источник: http://bgrins.github.io/devtools-snippets/#console-save


2
Я не из тех, кто бросает «Спасибо» везде, пока ответ не будет заблокирован, чтобы предотвратить «спасибо». Но спасибо. Собираюсь построить расширение.
— Леон Пеллетье

14
Функция Сохранить как ... на самом деле не помогла. Он не сохраняет полный объект JSON (в моем случае у меня был массив объектов, свойства объектов не были экспортированы в выходной файл). Но, надеюсь, старый добрый фрагмент devtool, который ты вставил, сработал как шарм. Спасибо
— М. Кеджи

1
если сохранить как не работает, то это регрессия. Вы должны сообщить об ошибке на crbug.com
— Патрик

1
@ ishandutta2007 Вы не должны загружать какой-либо фрагмент - теперь он встроен в консоль.
— Патрик

10
Правый клик не выполнит глубокое сохранение объекта.
— user1032531

246

Если у вас есть зарегистрированный объект:

  • Щелкните правой кнопкой мыши на объекте в консоли и нажмите Store as a global variable
  • вывод будет что-то вроде temp1
  • введите в консоли copy(temp1)
  • вставить в ваш любимый текстовый редактор

1
Я также обнаружил, что, вставив это в konklone.io/json, вы можете быстро получить это в файл CSV и оттуда в Excel.
— PeteW

9
Я получаю только [объект объекта]
— norbidrak

1
Консоль говорит «undefined», но это не значит, что если произошел сбой. Это все еще копирует это в буфер обмена :)
— Дин

1
УДИВИТЕЛЬНОЕ решение. Спасибо!
— Бен Рондо

1
На сегодняшний день самое простое и надежное решение!
— Крис Б.

130

Вы можете использовать Chrome DevTools Utilities API copy()команду для копирования строковое представление указанного объекта в буфер обмена.

Если у вас много объектов, вы можете JSON.stringify () все свои объекты и продолжать добавлять их в строку. Теперь используйте copy()метод, чтобы скопировать всю строку в буфер обмена.


13
Использование: копия (объект)
— antoine

Примечание: вы можете использоватьrequire("util").format(...) вместо применения JSON.stringify()по одному. Модуль по НПМ работает как на Node.js и веб - браузеров. util
— Константин Ван

2
Если вы набираете copy (object) и он возвращает 'undefined', это на самом деле успех. Объект теперь находится в вашем буфере обмена и может быть вставлен.
— Дин

7

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

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


Я получаю сообщение об ошибке -SyntaxError: export declarations may only appear at top level of a module --> debugout.js:9
— Senura Dissanayake

@SenuraDissanayake попробуйте сейчас - мне пришлось вернуть чей-то пиар, который я не тестировал: /
— inorganik

3

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


просто без каких-либо указаний на то, что ошибка против убывающего против журнала.
— Паулюс Лиекис


2

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

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

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

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


2

Это действительно поздно для вечеринки, но, возможно, это поможет кому-то. Мое решение похоже на то, что OP описал как проблемный, но, возможно, это функция, которую Chrome предлагает сейчас, но не тогда. Я попытался щелкнуть правой кнопкой мыши и сохранить файл .log после того, как объект был записан в консоль, но все, что мне дало, было текстовым файлом с этим:

console.js: 230 Выполнено: массив (50000) [0… 9999] [10000… 19999] [20000… 29999] [30000… 39999] [40000… 49999] длина: 50000__proto__: массив (0)

который был никому не нужен.

В итоге я нашел console.log(data)в коде код, установил для него точку останова и набрал JSON.Stringify(data)в консоли, которая отображала весь объект в виде строки JSON, а консоль Chrome фактически дает вам кнопку для ее копирования . Затем вставьте в текстовый редактор, и вот ваш JSON

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


в конце написано, что длинный текст был усечен , если при нажатии кнопки « Копировать» копируются все 20,6 МБ?
— Эдуард Флоринеску

1
@EduardFlorinescu да, все
— Адам Эй
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.