Jak zapisać dane wyjściowe pliku console.log (obiekt) w pliku?

240

Próbowałem użyć JSON.stringify(object), ale nie idzie to na całą strukturę i hierarchię.

Z drugiej strony console.log(object)robi to, ale nie mogę tego zapisać.

Na console.logwyjściu mogę rozwijać kolejno wszystkie dzieci i wybierać oraz kopiować / wklejać, ale struktura jest na to za duża.

Eduard Florinescu
źródło
Czy próbujesz zapisać plik console.log z przeglądarki do celów programistycznych? Pomocne może być wyjaśnienie, jaki jest twój cel końcowy.
travis,
1
@MichaelS Nie znalazłem obiektu w pliku dziennika.
Eduard Florinescu,
@travis Chcę wyeksportować obiekt do JSON, ale całą hierarchię, a także jego właściwości i właściwości jego właściwości. Praktycznie chcę uzyskać „interfejs” obiektu oprócz implementacji funkcji.
Eduard Florinescu,
2
@MichaelS, te pytania dotyczą zapisania całego dziennika, pytanie dotyczy zapisania pojedynczego obiektu. Różnią się one z mojego punktu widzenia.
James McMahon,

Odpowiedzi:

307

Aktualizacja: Możesz teraz kliknąć prawym przyciskiem myszy

Kliknij prawym przyciskiem myszy> Zapisz jako w panelu konsoli, aby zapisać zarejestrowane wiadomości w pliku.

Oryginalna odpowiedź:

Możesz użyć tego fragmentu devtools pokazanego poniżej, aby utworzyć metodę console.save. Tworzy FileBlob na podstawie danych wejściowych, a następnie automatycznie go pobiera.

(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)

Źródło: http://bgrins.github.io/devtools-snippets/#console-save

Patrick
źródło
2
Nie jestem z tych, którzy upuszczają wszędzie „Dzięki”, dopóki odpowiedź nie zostanie zablokowana, aby zapobiec „dziękuję”. Ale dzięki. Zbuduję rozszerzenie.
Léon Pelletier
14
Funkcja Zapisz jako ... tak naprawdę nie pomogła. Nie zapisuje pełnego obiektu JSON (w moim przypadku miałem tablicę obiektów, właściwości obiektów nie zostały wyeksportowane do pliku wyjściowego). Ale mam nadzieję, że stary dobry fragment devtool, który wkleiłeś, działał jak urok. Dziękuję
M. Kejji,
1
jeśli zapisz jako nie działało, to jest regresja. powinieneś zgłosić błąd na crbug.com
Patrick
1
@ ishandutta2007 nie powinieneś pobierać żadnego fragmentu - jest on teraz wbudowany w konsolę.
Patrick
10
Kliknięcie prawym przyciskiem myszy nie spowoduje głębokiego zapisania obiektu.
user1032531,
246

W przypadku zalogowania obiektu:

  • Kliknij prawym przyciskiem myszy obiekt w konsoli i kliknij Store as a global variable
  • wynik będzie podobny temp1
  • wpisz w konsoli copy(temp1)
  • wklej do swojego ulubionego edytora tekstu
artemdev
źródło
1
Odkryłem również, że wklejając to do konklone.io/json , możesz szybko pobrać to do pliku CSV, a stamtąd do Excela.
PeteW,
9
Dostaję tylko [Object Object]
norbidrak
1
Konsola mówi „niezdefiniowany”, ale to nie znaczy, że się nie udało. Nadal kopiuje go do schowka :)
Dean
1
NIESAMOWITE rozwiązanie. Dzięki wielkie!
Ben Rondeau
1
Zdecydowanie najprostsze i najbardziej niezawodne rozwiązanie!
Chris B.
130

Można użyć API Chrome DevTools Utilities copy()polecenia do kopiowania znaków reprezentujący określony obiekt do schowka.

Jeśli masz wiele obiektów, możesz faktycznie JSON.stringify () wszystkie swoje obiekty i dodawać je do łańcucha. Teraz użyj copy()metody, aby skopiować cały ciąg do schowka.

bthota
źródło
13
Zastosowanie: kopia (obiekt)
antoine
Uwaga: możesz użyćrequire("util").format(...) zamiast stosować JSON.stringify()jeden po drugim. Moduł na KMP działa na obu node.js i przeglądarek internetowych. util
Константин Ван
2
Jeśli wpiszesz copy (object) i zwróci ono „undefined”, to faktycznie zakończy się sukcesem. Obiekt znajduje się teraz w schowku i można go wkleić.
Dean
7

Istnieje otwarta wtyczka javascript, która właśnie to robi - debugout.js

Debugout.js zapisuje i zapisuje plik console.logs, aby aplikacja mogła uzyskać do nich dostęp. Pełne ujawnienie, napisałem to. Formatuje odpowiednio różne typy, może obsługiwać zagnieżdżone obiekty i tablice oraz opcjonalnie umieszczać znacznik czasu obok każdego dziennika. Przełącza także rejestrowanie na żywo w jednym miejscu.

inorganik
źródło
Dostaję błąd -SyntaxError: export declarations may only appear at top level of a module --> debugout.js:9
Senura Dissanayake
@SenuraDissanayake spróbuj teraz - musiałem przywrócić komuś PR, którego nie testowałem: /
inorganik
3

kliknij prawym przyciskiem myszy na konsoli .. kliknij Zapisz jako .. to jest to proste .. otrzymasz plik tekstowy

Akhil_S
źródło
tylko bez wskazania, co to jest błąd vs zanikanie vs log.
Paulius Liekis
2

Możesz użyć biblioteki l2i( https://github.com/seriyvolk83/logs2indexeddb ), aby zapisać wszystko, co wkładasz, console.log a następnie wywołać

l2i.download();

aby pobrać plik z dziennikami.

Alexander Volkov
źródło
2

Istnieje inne narzędzie typu open source, które pozwala zapisać wszystkie console.logdane wyjściowe w pliku na serwerze - JS LogFlush (plug!).

JS LogFlush to zintegrowane rozwiązanie do rejestrowania JavaScript, które obejmuje:

  • zamiana konsoli.log na konsolę bez interfejsu użytkownika - po stronie klienta.
  • system przechowywania logów - po stronie serwera.

Próbny

najdalszy
źródło
2

Na imprezę jest naprawdę późno, ale może komuś pomoże. Moje rozwiązanie wydaje się podobne do tego, co OP opisało jako problematyczne, ale być może jest to funkcja, którą Chrome oferuje teraz, ale nie wtedy. Próbowałem kliknąć prawym przyciskiem myszy i zapisać plik .log po zapisaniu obiektu w konsoli, ale wszystko, co mi dało, to plik tekstowy z tym:

console.js: 230 Wykonano: Array (50000) [0… 9999] [10000… 19999] [20000… 29999] [30000… 39999] [40000… 49999] długość: 50000__proto__: Array (0)

co nikomu się nie przydało.

Skończyło się to na znalezieniu console.log(data)kodu, upuszczeniu na nim punktu przerwania, a następnie wpisaniu JSON.Stringify(data)w konsoli, która wyświetlała cały obiekt jako ciąg JSON, a konsola Chrome faktycznie daje ci przycisk do skopiowania go . Następnie wklej do edytora tekstu i tam jest twój JSON

wprowadź opis zdjęcia tutaj

Adam Hej
źródło
napisano na końcu, że długi tekst został obcięty , jeśli twoja kopia prasowa kopiuje całe 20,6 MB?
Eduard Florinescu,
1
@EduardFlorinescu tak, wszystko
Adam Hej