Zapisz plik console.log w przeglądarce Chrome do pliku

173

Czy ktoś zna sposób na zapisanie danych wyjściowych console.log w przeglądarce Chrome do pliku? Albo jak skopiować tekst z konsoli?

Załóżmy, że przeprowadzasz kilka godzin testów funkcjonalnych i masz tysiące wierszy danych wyjściowych console.log w przeglądarce Chrome. Jak go zapisać lub wyeksportować?

eeejay
źródło

Odpowiedzi:

98

Musiałem zrobić to samo i oto rozwiązanie, które znalazłem:

  1. Włącz logowanie z wiersza poleceń za pomocą flag:

    --enable-logging --v=1

    To rejestruje wszystko, co Chrome robi wewnętrznie, ale także rejestruje wszystkie console.log()wiadomości. Plik dziennika jest wywoływany chrome_debug.logi znajduje się w User Data Directory.

  2. Przefiltruj otrzymany plik dziennika pod kątem wierszy z CONSOLE(\d+).

Zauważ, że dzienniki konsoli nie pojawiają się z --incognito.

Waleed Abdulla
źródło
3
wygląda na to, że nie działa na moim Mac OS, są wewnętrzne dzienniki, ale nie ma Console.log ...
Nico
7
Nie powoduje to zapisania informacji console.log do pliku dziennika. W systemie Windows 8.
coderama
4
Na komputerze Mac znalazłem plik dziennika w ~ / Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar
2
To nadal działa dla mnie na OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1z logiem zapisanym w~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb
3
Nie mam nic poza wewnętrznymi logami chrome. Moje console.log()linie nie są nigdzie w tym pliku. Czy ktoś ma na to rozwiązanie?
xandermonkey
187

Dobre wieści

Narzędzia deweloperskie Chrome pozwalają teraz zapisywać dane wyjściowe konsoli do pliku natywnie

  1. Otwórz konsolę
  2. Kliknij prawym przyciskiem myszy
  3. Wybierz „zapisz jako…”

zapisz konsolę do pliku

Instrukcje dla programistów Chrome tutaj .

adardesign
źródło
3
Czy można to zrobić za pomocą skrótu klawiaturowego lub uruchomienia polecenia na konsoli?
Sarthak Singhal
1
Oto lista wszystkich skrótów devTools developer.chrome.com/devtools/docs/shortcuts
adardesign
11
To nie wydaje się kopiować śladu stosu
Michael
2
Czy możesz ponownie otworzyć ten plik w konsoli? Jeśli tak, jak to robisz?
Mahathi Vempati
7
Zwróć uwagę, że to nie rozwinie obiektów - nadal wydrukuje duże obiekty w ich obciętej formie, np {a: 1, b: 2, c: 3, ...}.
Galen Long
29

Istnieje wtyczka javascript typu open source, która właśnie to robi, ale dla każdej przeglądarki - debugout.js

Debugout.js rejestruje i zapisuje console.logs, aby aplikacja miała do nich dostęp. Pełne ujawnienie, napisałem to. Odpowiednio formatuje różne typy, obsługuje zagnieżdżone obiekty i tablice oraz opcjonalnie może umieścić znacznik czasu obok każdego dziennika. Możesz także przełączyć rejestrowanie na żywo w jednym miejscu i bez konieczności usuwania wszystkich instrukcji logowania.

nieorganik
źródło
4
Dla porównania, chociaż wygląda to na świetne narzędzie, nie przechwytuje danych wyjściowych z przeglądarki, na przykład w przypadku niepowodzenia ładowania obrazu lub innych wbudowanych danych wyjściowych konsoli, i wymaga przepisania instrukcji dziennika przy użyciu specjalnej składni.
Lukus
@Lukus to z pewnością nie przechwytuje danych wyjściowych przeglądarki (do tego potrzebna byłaby małpa), ale nie jest wymagana żadna specjalna składnia. przekazać te same argumenty, co console.log
inorganik
1
@Inorganik Szukałem sposobu na testy selenu w celu przechwycenia danych wyjściowych konsoli, ale zostanie on użyty do usługi testowej, abyśmy nie mieli kontroli nad witrynami internetowymi użytkownika. Myślę, że twoje narzędzie jest fajne, ale wymagałoby to od użytkownika przepisania istniejących instrukcji console.log na bugout.log, to właśnie miałem na myśli, mówiąc o specjalnej składni. Wygląda na to, że tym razem nie ma sposobu na zrobienie tego w różnych przeglądarkach.
Lukus
Nie, to nie zadziała dla nas. Musimy zapisać dziennik wyników testów złożonej strony internetowej z dużą ilością skryptów firm trzecich, które działają na różnych domenach i większości z nich nie możemy zmienić.
Mike Keskinov
23

Znalazłem na to świetny i łatwy sposób.

  1. W konsoli - kliknij prawym przyciskiem obiekt zalogowany w konsoli

  2. Kliknij „Zapisz jako zmienną globalną”

  3. Zobacz nazwę nowej zmiennej - np. Jest to nazwa_zmiennej1

  4. Wpisz w konsoli: JSON.stringify (nazwa_zmiennej1)

  5. Skopiuj zawartość ciągu zmiennej: np. {"A": 1, "b": 2, "c": 3}

wprowadź opis obrazu tutaj

  1. Przejdź do jakiegoś edytora online JSON: np. Https://jsoneditoronline.org/

wprowadź opis obrazu tutaj

Połączyć
źródło
1
Wydaje się niezgrabny na powierzchni, ale działa całkiem dobrze. W późniejszych wersjach u dołu wyniku znajduje się przycisk „Kopiuj”. Po prostu wciskam to, a następnie mam mały skrypt, który zapisuje schowek jako plik .json i otwiera się w Visual Studio, który jest bardzo czytelny. Jedyną zmianą jest to, że robię JSON.stringify (temp1, null, 2), aby ułatwić czytanie. Poniższa sztuczka, aby zapisać konsolę, działa również dobrze.
Wade Hatler,
8

Aby uzyskać lepszy plik dziennika (bez bzdur z debugowaniem Chrome), użyj:

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

zamiast tego --v=1jest po prostu za dużo informacji.

Nadal będzie wyświetlać błędy i ostrzeżenia, które zwykle pojawiają się w konsoli Chrome.

aktualizacja z 18 maja 2020 r .: Właściwie myślę, że to już nie jest prawda. Nie mogłem znaleźć komunikatów konsoli na jakimkolwiek poziomie rejestrowania.

JohnP2
źródło
7

Może to być pomocne lub nie, ale w systemie Windows można odczytać dziennik konsoli za pomocą funkcji śledzenia zdarzeń dla systemu Windows

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

Nasze testy integracji są uruchamiane w .NET, więc używam tej metody, aby dodać dziennik konsoli do naszych wyników testu. Zrobiłem przykładowy projekt konsoli, aby zademonstrować tutaj: https://github.com/jkells/chrome-trace

--enable-logging --v = 1 nie działa w najnowszej wersji Chrome.

Jared Kells
źródło
3

Wiele dobrych odpowiedzi, ale dlaczego po prostu nie użyć JSON.stringify (your_variable)? Następnie pobierz zawartość za pomocą kopiowania i wklejania (usuń zewnętrzne cudzysłowy). Tę samą odpowiedź zamieściłem również pod adresem: Jak zapisać dane wyjściowe z console.log (obiektu) do pliku?

user1889992
źródło
1
Może to pomóc w przypadku problemów dotyczących Uncaught TypeError: Converting circle structure to JSON .
KtX2SkD
2

Jest jeszcze jedno narzędzie typu open source, które pozwala na zapisanie wszystkich console.logwyników w pliku na serwerze - JS LogFlush (wtyczka!).

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

  • Wymiana pliku console.log bez użycia interfejsu użytkownika w różnych przeglądarkach - po stronie klienta.
  • system przechowywania logów - po stronie serwera.

Próbny

najdalszy
źródło
2

Jeśli używasz serwera Apache na swoim hoście lokalnym (nie rób tego na serwerze produkcyjnym), możesz również opublikować wyniki w skrypcie zamiast zapisywać go na konsoli.

Więc zamiast tego console.logmożesz napisać:

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

Wtedy save.phpmożesz to zrobić

<?php

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

 file_put_contents("path/$fn", $data);
supersan
źródło
1
Naprawdę mam nadzieję, że nikt nigdy nie prześle tego na serwer w produkcji 🙁. Jest to niebezpieczne dla serwera.
Dave Mackintosh
Czy nie przeczytałeś pierwszego wiersza: „Jeśli używasz serwera Apache na swoim hoście lokalnym”?
supersan
Twój negatywny głos na mój post nie jest uzasadniony, ponieważ byłoby to niewiarygodnie głupie dla kogoś, kto uruchamia serwer produkcyjny na „localhost” (gdzie JSONP żąda opublikowania danych).
supersan
Nigdy nie głosowałem na twoją odpowiedź, po prostu wskazałem na niebezpieczeństwo, jakie ten skrypt stwarza, jeśli kiedykolwiek zostanie przesłany na serwer dostępny dla publiczności.
Dave Mackintosh
1

W systemie Linux (przynajmniej) możesz ustawić CHROME_LOG_FILE w środowisku tak, aby chrome zapisywał dziennik aktywności konsoli do nazwanego pliku przy każdym uruchomieniu. Dziennik jest nadpisywany przy każdym uruchomieniu Chrome. W ten sposób, jeśli masz zautomatyzowaną sesję, która uruchamia Chrome, nie musisz zmieniać sposobu uruchamiania Chrome, a dziennik jest dostępny po zakończeniu sesji.

eksportuj CHROME_LOG_FILE = chrome.log

Dr Chandra
źródło
0

Obecnie jest to bardzo proste - kliknij prawym przyciskiem myszy dowolną pozycję wyświetlaną w dzienniku konsoli i wybierz opcję Zapisz jako i zapisz całe dane wyjściowe dziennika do pliku na komputerze.

brianlmerritt
źródło
0

inne rozwiązania w tym wątku nie działały na moim komputerze Mac. Oto rejestrator, który sporadycznie zapisuje reprezentację ciągu przy użyciu ajax. użyj go z console.savezamiastconsole.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="";
  }
};

w zależności od potrzeb, możesz zapisać ten ciąg lub po prostu console.loggo i skopiować i wkleić. oto Ajax dla Ciebie na wypadek, gdybyś chciał go zapisać:

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.phpnależy dołączyć dane do pliku dziennika gdzieś. Nie potrzebowałem tej części, więc nie dołączam jej tutaj. :)

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

jaya
źródło