2010-08-11 10 views
9

Czy jest jakiś sposób na eksportowanie wiadomości zalogowanych do konsoli javascript w przeglądarce Google Chrome?Eksportuj dziennik konsoli Javascript z przeglądarki Google Chrome

Jeśli nie, czy ktoś może zaproponować dobry sposób na zdiagnozowanie problemów javascript na komputerze klienta? Nie udało mi się replikować problemów lokalnie, pomimo utworzenia identycznego środowiska.

Odpowiedz

17

Krok 1: Dodaj kilka console.log sprawozdania, które pomogą zdiagnozować problem

Krok 2: Dodaj logikę ponownego zdefiniowania console.log na układ swojego klienta tak, że rzeczywiście oszczędza swoje argumenty do okna .log (lub cokolwiek innego) zamiast faktycznie logować je do konsoli.

window.log = [] 
console = console || {"log":function(x) {window.log.push(x);}} 

Krok 3: Dodawanie obsługi onUnload które pożary żądania AJAX do serwera z treścią window.log jako jeden z parametrów

Krok 4: Profit! ;-)

Dodatkową premią do tego systemu jest to, że (gdy już to zrobisz) możesz użyć console.log bez względu na to, czy jesteś w swoim środowisku programistycznym, czy w środowisku na żywo, to zrobi to, co trzeba.

+0

PS: Nie wszystkie przeglądarki obsługują funkcję onUnload; jeśli twój klient tego nie robi, prawdopodobnie będziesz chciał wywołać wywołania AJAX na każdym pliku console.log (lub użyć window.setInterval do "poll" window.log często). – machineghost

+0

Interesujące i trudne .. ale wygląda na skomplikowane! (w szczególności krok 3) Czy nie ma prostszego sposobu na zrobienie tego ..? – Dexter

+0

To naprawdę proste, ale wystarczy spróbować pokazać, że dodałem drugą odpowiedź. – machineghost

1

Możesz użyć mojej biblioteki logowania JavaScript, log4javascript. Trzeba będzie:

  • Konfigurowanie log4javascript wysyłania wiadomości logowania do serwera za pomocą AjaxAppender (patrz quick start guide, w pobliżu dna)
  • Dodaj połączeń logowania do JavaScriptu
  • Zbierz logowaniem wiadomości na serwerze przy użyciu wybranej technologii
7

Oto nieco krótsza/prostsza wersja mojej poprzedniej odpowiedzi. Aby wszystko było łatwiejsze, po prostu wykonamy wywołanie AJAX na każdym dzienniku, a aby jeszcze łatwiej było, użyjemy jQuery do "ciężkiego podnoszenia". (Jeśli używasz biblioteki JS innej niż jQuery, powinna ona mieć jakąś podobną metodę, jeśli nie, lub jeśli nie używasz biblioteki JS ... czas na poważnie za jQuery!) Och, a my " Wrzucam pseudo-kod po stronie serwera, aby pokazać, jak łatwa jest ta część równania.

Krok 1: Dodaj kilka console.log sprawozdania, które pomogą zdiagnozować problem

Krok 2: Dodaj logikę ponownego zdefiniowania console.log na układ swojego klienta tak, że wysyła do serwera dziennika jeśli nie ma konsoli

var SERVER_URL = "www.yourServer.com/ajaxLogger.jsp"; 
var ajaxConsole = {"log":function(x) { 
    $.get(SERVER_URL, {"log":x}); 
}} 
console = console || ajaxConsole; // If there is no console, use the AJAX one 

Krok 3: Tworzenie strony logowania na serwerze

Poniższy przykład używa pseudo-kodu, ponieważ każdy ma inny język po stronie serwera:

String log = pageParameters["log"]; 
Database.execute("INSERT INTO yourLogTable (log, date) VALUES ('" + 
     dbEscape(log) +"', current date)"); 
1

Istnieje narzędzie open-source, które umożliwia zapisanie wszystkich danych wyjściowych console.log w pliku na serwerze - JS LogFlush (wtyczka!).

JS LogFlush jest zintegrowanym rozwiązaniem JavaScript rejestrowanie które obejmują:

  • cross-browser wymiana UI-mniej console.log - po stronie klienta.
  • system przechowywania dzienników - po stronie serwera.

Demo