¿Cómo puedo imprimir un mensaje en la consola de error, preferiblemente incluyendo una variable?
Por ejemplo, algo como:
print('x=%d', x);
¿Cómo puedo imprimir un mensaje en la consola de error, preferiblemente incluyendo una variable?
Por ejemplo, algo como:
print('x=%d', x);
Respuestas:
Instale Firebug y luego puede usar console.log(...)
y console.debug(...)
, etc. (consulte la documentación para obtener más información).
console.log()
etc. debería funcionar en todos los navegadores, incluido IE. Sin embargo, en todos los casos, debe tener la ventana del depurador abierta en ese momento, de lo contrario, las llamadas a console
generarán errores.
console.error(message); //gives you the red errormessage
console.log(message); //gives the default message
console.warn(message); //gives the warn message with the exclamation mark in front of it
console.info(message); //gives an info message with an 'i' in front of the message
También puede agregar CSS a sus mensajes de registro:
console.log('%c My message here', "background: blue; color: white; padding-left:10px;");
console.log
puedes usar css dentro de la consola: |
Las excepciones se registran en la consola de JavaScript. Puede usar eso si desea mantener Firebug deshabilitado.
function log(msg) {
setTimeout(function() {
throw new Error(msg);
}, 0);
}
Uso:
log('Hello World');
log('another message');
throw
debe estar envuelto en un setTimeout
?
Una buena forma de hacer esto que funciona en varios navegadores se describe en Depuración de JavaScript: ¡Deseche sus alertas! .
throw()
Definitivamente no es la forma de hacer esto. te meterás en problemas tarde o temprano. para mí fue antes :(
Aquí hay una solución a la pregunta literal de cómo imprimir un mensaje en la consola de errores del navegador, no en la consola del depurador. (Puede haber buenas razones para omitir el depurador).
Como señalé en los comentarios sobre la sugerencia de lanzar un error para obtener un mensaje en la consola de error, un problema es que esto interrumpirá el hilo de ejecución. Si no desea interrumpir el hilo, puede lanzar el error en un hilo separado, uno creado usando setTimeout. De ahí mi solución (que resulta ser una elaboración de la de Ivo Danihelka):
var startTime = (new Date()).getTime();
function logError(msg)
{
var milliseconds = (new Date()).getTime() - startTime;
window.setTimeout(function () {
throw( new Error(milliseconds + ': ' + msg, "") );
});
}
logError('testing');
Incluyo el tiempo en milisegundos desde la hora de inicio porque el tiempo de espera podría sesgar el orden en el que puede esperar ver los mensajes.
El segundo argumento para el método de error es para el nombre de archivo, que es una cadena vacía aquí para evitar la salida del nombre de archivo inútil y el número de línea. Es posible obtener la función de llamada pero no de una manera simple e independiente del navegador.
Sería bueno si pudiéramos mostrar el mensaje con un icono de advertencia o mensaje en lugar del icono de error, pero no puedo encontrar una manera de hacerlo.
Otro problema con el uso del tiro es que podría ser atrapado y tirado por un try-catch cerrado, y poner el tiro en un hilo separado también evita ese obstáculo. Sin embargo, hay otra forma de detectar el error, que es si el controlador window.onerror se reemplaza por uno que hace algo diferente. No puedo ayudarte allí.
Para responder realmente la pregunta:
console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);
En lugar de error, también puede usar información, iniciar sesión o advertir.
console.error(..)
es una característica no estándar y no debe usarse en producción. ¿Cuál es su opinión sobre esto? ¿Tiene alguna sugerencia para un programador novato usando console.error
vs console.log
?
console.log(...)
"no estándar" también. En ese sentido, console.error
es tan estable como console.log
.
Si está utilizando Firebug y necesita admitir IE, Safari u Opera también, Firebug Lite agrega soporte de console.log () a estos navegadores.
El WebKit Web Inspector también es compatible con Firebug consola de API (sólo una pequeña adición a la respuesta de Dan ).
Una nota sobre 'throw ()' mencionada anteriormente. Parece que detiene la ejecución de la página por completo (verifiqué en IE8), por lo que no es muy útil para registrar "procesos en curso" (como rastrear una determinada variable ...)
Mi sugerencia es quizás agregar un elemento de área de texto en algún lugar de su documento y cambiar (o agregar) su valor (que cambiaría su texto) para registrar información cuando sea necesario ...
console.log()
, throw()
etc. Además, no hay nada de malo en el comportamiento de throw()
lo que parece implicar: el hecho de que detenga la ejecución es intencional y documentado ( desarrollador. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ), y es coherente con la forma en que se lanzan / capturan las excepciones en otros lenguajes de programación. (Si desea registrar el contenido de una variable sin detener la ejecución, para eso console.log()
está.)
console.log
, por lo que la gente daba alternativas. Sobre throw()
detener la ejecución, por supuesto , es intencional, nadie dijo que no. Es por eso que generalmente no es una buena manera de registrar información de depuración en tiempo de ejecución, lo que el OP quería ...
Como siempre, Internet Explorer es el gran elefante en patines que te detiene simplemente usando console.log()
.
El registro de jQuery se puede adaptar con bastante facilidad, pero es una molestia tener que agregarlo en todas partes. Una solución si está utilizando jQuery es colocarlo en su archivo jQuery al final, minimizado primero:
function log()
{
if (arguments.length > 0)
{
// Join for graceful degregation
var args = (arguments.length > 1) ? Array.prototype.join.call(arguments, " ") : arguments[0];
// This is the standard; Firebug and newer WebKit browsers support this.
try {
console.log(args);
return true;
} catch(e) {
// Newer Opera browsers support posting erros to their consoles.
try {
opera.postError(args);
return true;
}
catch(e)
{
}
}
// Catch all; a good old alert box.
alert(args);
return false;
}
}
Visite https://developer.chrome.com/devtools/docs/console-api para obtener una referencia completa de la API de la consola.
console.error(object[Obj,....])\
En este caso, el objeto sería su cadena de error
function foo() {
function bar() {
console.trace("Tracing is Done here");
}
bar();
}
foo();
console.log(console); //to print console object
console.clear('console.clear'); //to clear console
console.log('console.log'); //to print log message
console.info('console.info'); //to print log message
console.debug('console.debug'); //to debug message
console.warn('console.warn'); //to print Warning
console.error('console.error'); //to print Error
console.table(["car", "fruits", "color"]);//to print data in table structure
console.assert('console.assert'); //to print Error
console.dir({"name":"test"});//to print object
console.dirxml({"name":"test"});//to print object as xml formate
To Print Error:- console.error('x=%d', x);
console.log("This is the outer level");
console.group();
console.log("Level 2");
console.group();
console.log("Level 3");
console.warn("More of level 3");
console.groupEnd();
console.log("Back to level 2");
console.groupEnd();
console.log("Back to the outer level");
La forma más sencilla de hacer esto es:
console.warn("Text to print on console");
Para responder a su pregunta, puede usar las funciones de ES6,
var var=10;
console.log(`var=${var}`);
Esto no se imprime en la consola, pero le abrirá una ventana emergente de alerta con su mensaje que podría ser útil para algunas depuraciones:
solo haz:
alert("message");