2008-09-18 18 views
9

Chciałbym utworzyć "uniwersalną" funkcję rejestrowania debugowania, która sprawdza przestrzeń nazw JS dla dobrze znanych bibliotek rejestrowania.Jakie narzędzia do rejestrowania debugowania są dostępne w JavaScript?

Na przykład, obecnie obsługuje Firebug za console.log:

var console = window['console']; 
if (console && console.log) { 
    console.log(message); 
} 

Oczywiście, działa to tylko w Firefoksie jeśli jest zainstalowana Firebug/włączone (to będzie również działać na innych przeglądarkach z Firebug Lite). Zasadniczo udostępniam bibliotekę JS, której nie znam, do jakiego środowiska zostanie ona wciągnięta, i chciałbym móc dowiedzieć się, czy istnieje sposób raportowania wyników debugowania dla użytkownika.

Być może jQuery zapewnia coś - sprawdziłbym, czy jQuery jest obecny i używa go. A może są dobrze znane wtyczki IE, które działają, do których mogę powąchać. Ale musi to być dość dobrze ugruntowany i wykorzystany mechanizm. Nie mogę sprawdzić każdej niezrozumiałej funkcji dziennika, którą tworzą ludzie.

Proszę, tylko jedna biblioteka/technologia za odpowiedź, aby uzyskać ranking głosowy. Ponadto użycie funkcji alert() jest dobrym rozwiązaniem krótkoterminowym, ale ulega przerwaniu, jeśli wymagane jest niezawodne rejestrowanie debugowania lub blokowanie wykonywania jest problemem.

Odpowiedz

-1

Ja jestem zwolennikiem następujące:

alert('Some message/variables'); 
+0

Jest to dobre rozwiązanie tymczasowe, ale nie powiedzie się, jeśli emitujesz rejestrowanie na poziomie informacji, którego zazwyczaj jest dużo. Aplikacja szybko stałaby się bezużyteczna z powodu wszystkich alertów() s – levik

+0

Ahh, założyłem, że chodziło bardziej o krótkotrwałe wyprowadzenie informacji – Teifion

+0

Nawet jeśli byłeś po prostu "wyprowadzaniem" informacji, ponieważ alert jest blokującym, może, niestety, , powodują działania niepożądane, szczególnie z Ajaxem. Mój kod zachowywał się kiepsko tylko z powodu ostrzeżenia umieszczonego w niewłaściwym miejscu. –

4

Firebug lite jest krzyż przeglądarki, wersja lite Firefbug że będzie przynajmniej daje console.log możliwości na większości przeglądarek.

0

Co z Firebug Lite (dla przeglądarek innych niż Firefox)? Nie użyłem go zbyt wiele, z wyjątkiem debugowania kodu Dojo w IE. Ale stara się jak najlepiej umieścić konsolę Firebug w IE, Safari i Operze.

Oczywiście zawsze istnieje niezawodny "alert (err_msg);" : D

1

Jeśli już korzystasz z jQuery, mogę serdecznie polecić wtyczkę jQuery Debug (a.k.a., jquery.debug.js). Zobacz http://trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug/.

Ta wtyczka umożliwia wyłączanie lub wyłączanie rejestrowania debugowania za pomocą przełącznika globalnego. Rejestrowanie wygląda tak:

$.log('My value is: ' + val); 

wyjściowy jest wysyłany do console.log pod Firefox i jest zapisywane w bloku div włożonej na dole strony w innych przeglądarkach.

+0

Nie używam jQuery - jak napisałem, tworzę bibliotekę, którą MOGĄ być ładowane na stronie, na której znajduje się jQuery. Jeśli tak się stanie, chciałbym skorzystać z funkcji jQuery, na których mogę polegać ... Ale wtyczka innej firmy to ... – levik

7

Osobiście używam Firebug/Firebug Lite i na IE pozwól Visual Studio do debugowania. Żadne z nich nie przynosi nic dobrego, gdy użytkownik używa jakiejś szalonej przeglądarki. Naprawdę musisz pobrać javascript po stronie klienta, aby zarejestrować jego błędy na serwerze. Rzuć okiem na prezentację power point, do której dodałem link poniżej. Ma kilka ładnych pomysłów na to, jak uzyskać javascript do rejestrowania rzeczy na serwerze.

Zasadniczo, przechwytuje window.onerror i twoje try {} catch() {} blokuje z funkcją, która wysyła żądanie z powrotem do twojego serwera z użytecznymi informacjami debugowania.

Właśnie wdrożyłem taki proces w mojej aplikacji internetowej. Mam każdy blok catch() {} blokujący funkcję, która wysyła z powrotem zakodowany komunikat JSON do serwera, który z kolei używa mojej istniejącej infrastruktury logowania (w moim przypadku log4perl).Prezentowana przeze mnie prezentacja sugeruje również ładowanie obrazu w javascript, w tym błędy jako część żądania GET. Jedyny problem polega na tym, że jeśli chcesz uwzględnić ślady stosu (które IE w ogóle nie generuje), żądanie będzie zbyt duże.

Tracking ClientSide Errors, by Eric Pascarello

PS: Chciałem dodać, że nie sądzę, że jest to dobry pomysł, aby użyć dowolnego rodzaju biblioteki jak jQuery dla „hardcore” Logowanie bo może powodem błędu jesteś rejestrowania jest jQuery lub Firebug Lite! Być może błąd polega na tym, że przeglądarka (kaszel IE6) wykonała szaloną kolejność ładowania i generuje pewien błąd odwołania zerowego, ponieważ było zbyt głupie, aby poprawnie załadować bibliotekę.

W moim przykładzie upewniłem się, że cały mój kod dziennika javascript znajduje się w < główce > i nie został wciągnięty jako plik .js. W ten sposób mogę być dość pewny, że bez względu na to, jakie rodzaje krzywych piłek rzuca przeglądarka, szanse są dobre, że jestem w stanie je zarejestrować.

3

MochiKit posiada następujące funkcje (zawarte tutaj w pełnej rozdzielczości przestrzeni nazw):

MochiKit.Logging.logDebug() // prefaces value with "DEBUG: " 
MochiKit.Logging.log() // prefaces value with "INFO: " 
MochiKit.Logging.logError() // prefaces value with "ERROR: " 
MochiKit.Logging.logFatal() // prefaces value with "FATAL: " 
MochiKit.Logging.logWarning() // prefaces value with "WARNING: " 

jest dużo więcej do nazw MochiKit.Logging niż ten, ale to są podstawy.