2008-09-18 12 views
9

Me gustaría crear una función de registro de depuración "universal" que inspeccione el espacio de nombres JS para las bibliotecas de registro conocidas.¿Qué herramientas de registro de depuración están disponibles desde Javascript?

Por ejemplo, actualmente se apoya console.log de Firebug:

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

Obviamente, esto sólo funciona en Firefox si se ha instalado Firebug/permitido (que van también funcionan en otros navegadores con Firebug Lite). Básicamente, voy a proporcionar una biblioteca JS que no sé en qué entorno se incorporará, y me gustaría poder averiguar si hay una manera de informar la salida de depuración al usuario.

Por lo tanto, tal vez jQuery proporcione algo: verificaría que jQuery esté presente y lo use. O tal vez hay conocidos complementos de IE que funcionan y que puedo oler. Pero tiene que ser un mecanismo bastante bien establecido y utilizado. No puedo verificar todas las funciones de registro ocultas que las personas crean.

Por favor, solo una biblioteca/tecnología por respuesta, para que puedan obtener el rango del voto. Además, el uso de alert() es una buena solución a corto plazo, pero se rompe si se desea un registro de depuración robusto o si el bloqueo de la ejecución es un problema.

Respuesta

-1

mí, soy un firme creyente en lo siguiente:

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

Esta es una buena solución temporal, pero falla si está emitiendo un registro de nivel de información, que generalmente es mucho. La aplicación quedaría inutilizable rápidamente debido a todas las alertas() s – levik

+0

Ahh, supuse que era más acerca de la información a corto plazo – Teifion

+0

Incluso si simplemente estuvieras "enviando" información, porque la alerta es una llamada de bloqueo, puede, desafortunadamente , causar efectos secundarios, esp. con Ajax. He tenido un comportamiento deficiente del código solo por una alerta colocada en el lugar equivocado. –

4

Firebug lite es un navegador cruz, versión lite de Firefbug ESO al menos le dan capacidades console.log en la mayoría de los navegadores.

0

¿Qué hay de Firebug Lite (para aquellos navegadores que no son Firefox)? No lo he usado mucho excepto cuando depuro el código Dojo en IE. Pero intenta lo mejor que puede poner una consola Firebug en IE, Safari y Opera.

Por supuesto, siempre existe la 'alerta confiable' (err_msg); ' : D

1

Si ya está utilizando jQuery, puedo recomendar encarecidamente el complemento jQuery Debug (a.k.a., jquery.debug.js). Ver http://trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug/.

Este complemento le permite activar o desactivar el registro de depuración mediante un interruptor global. El registro es el siguiente:

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

La salida se envía a console.log en Firefox y se escribe en un bloque div insertada en la parte inferior de la página en otros navegadores.

+0

No estoy usando jQuery, como dije, estoy creando una biblioteca que PUEDE estar cargada en una página donde jQuery está presente. Si esto sucede, me gustaría usar las características de jQuery en las que puedo confiar ... Pero un complemento de terceros es una extensión ... – levik

7

Yo personalmente uso Firebug/Firebug Lite y en IE dejo que Visual Studio realice la depuración. Sin embargo, ninguno de estos hace ningún bien cuando un visitante está usando un navegador loco. Realmente necesita obtener su javascript del lado del cliente para registrar sus errores en su servidor. Eche un vistazo a la presentación del power point a la que he vinculado a continuación. Tiene algunas ideas bastante claras sobre cómo obtener su javascript para registrar cosas en su servidor.

Básicamente, engancha window.onerror y sus bloques try {} catch() {} con una función que realiza una solicitud a su servidor con información de depuración útil.

Acabo de implementar dicho proceso en mi propia aplicación web. Tengo todos los bloques catch() {} llamando a una función que envía un mensaje codificado JSON al servidor, que a su vez usa mi infraestructura de registro existente (en mi caso log4perl).La presentación a la que me estoy vinculando también sugiere cargar una imagen en su javascript incluyendo los errores como parte de la solicitud GET. El único problema es si desea incluir trazados de pila (que IE no genera para usted), la solicitud será demasiado grande.

Tracking ClientSide Errors, by Eric Pascarello

PS: Yo quería añadir que no creo que es una buena idea utilizar cualquier tipo de biblioteca como jQuery para el registro de "Hardcore", porque tal vez el motivo del error se está conectando es jQuery o Firebug Lite! Tal vez el error es que el navegador (tos IE6) hizo una orden de carga loca y está lanzando algún tipo de error de referencia nula porque era demasiado estúpido para cargar la biblioteca correctamente.

En mi caso, me aseguré de que todo mi código de registro javascript esté en el <encabezado> y no se haya extraído como un archivo .js. De esta forma, puedo estar razonablemente seguro de que no importa qué tipo de bolas curvas arroje el navegador, las probabilidades son buenas, puedo iniciar sesión.

3

MochiKit tiene las siguientes funciones (incluidas aquí con resolución completa del espacio de nombres):

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: " 

hay mucho más para el espacio de nombres MochiKit.Logging que esto, pero estos son los fundamentos.

Cuestiones relacionadas