Comment imprimer un message sur la console d'erreur, en incluant de préférence une variable?
Par exemple, quelque chose comme:
print('x=%d', x);
Comment imprimer un message sur la console d'erreur, en incluant de préférence une variable?
Par exemple, quelque chose comme:
print('x=%d', x);
Réponses:
Installez Firebug puis vous pouvez utiliser console.log(...)
et console.debug(...)
, etc. (voir la documentation pour plus).
console.log()
etc devrait fonctionner dans tous les navigateurs, y compris IE. Cependant, dans tous les cas, vous devez avoir la fenêtre du débogueur ouverte à ce moment, sinon les appels à console
généreront des erreurs.
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
Vous pouvez également ajouter du CSS à vos messages de journalisation:
console.log('%c My message here', "background: blue; color: white; padding-left:10px;");
console.log
vous pouvez utiliser css à l'intérieur de la console: |
Les exceptions sont enregistrées dans la console JavaScript. Vous pouvez l'utiliser si vous souhaitez garder Firebug désactivé.
function log(msg) {
setTimeout(function() {
throw new Error(msg);
}, 0);
}
Usage:
log('Hello World');
log('another message');
throw
doit être emballé dans un setTimeout
?
Une bonne façon de faire cela qui fonctionne sur plusieurs navigateurs est décrite dans Débogage JavaScript: Jetez vos alertes! .
throw()
n'est certainement pas la façon de procéder. vous aurez des ennuis tôt ou tard. pour moi c'était plus tôt :(
Voici une solution à la question littérale de savoir comment imprimer un message sur la console d'erreur du navigateur, pas sur la console de débogage. (Il peut y avoir de bonnes raisons de contourner le débogueur.)
Comme je l'ai noté dans les commentaires sur la suggestion de lancer une erreur pour obtenir un message dans la console d'erreur, un problème est que cela interrompra le thread d'exécution. Si vous ne voulez pas interrompre le thread, vous pouvez jeter l'erreur dans un thread séparé, créé à l'aide de setTimeout. D'où ma solution (qui se révèle être une élaboration de celle d'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');
J'inclus le temps en millisecondes depuis l'heure de début car le délai d'attente pourrait fausser l'ordre dans lequel vous pourriez vous attendre à voir les messages.
Le deuxième argument de la méthode Error concerne le nom de fichier, qui est une chaîne vide ici pour empêcher la sortie du nom de fichier et du numéro de ligne inutiles. Il est possible d'obtenir la fonction appelant mais pas de manière indépendante du navigateur.
Ce serait bien si nous pouvions afficher le message avec une icône d'avertissement ou de message au lieu de l'icône d'erreur, mais je ne trouve pas de moyen de le faire.
Un autre problème avec l'utilisation de lancer est qu'il pourrait être attrapé et jeté par un try-catch enfermant, et placer le lancer dans un fil séparé évite également cet obstacle. Cependant, il existe un autre moyen de détecter l'erreur, à savoir si le gestionnaire window.onerror est remplacé par un gestionnaire qui fait quelque chose de différent. Je ne peux pas vous y aider.
Si vous utilisez Safari , vous pouvez écrire
console.log("your message here");
et il apparaît directement sur la console du navigateur.
console.log()
.
console.log()
. Ce n'était pas vrai jusqu'à récemment.
Pour réellement répondre à la question:
console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);
Au lieu d'erreur, vous pouvez également utiliser info, log ou warn.
console.error(..)
s'agit d'une fonctionnalité non standard et ne doit pas être utilisée en production. Quelle est votre opinion à ce sujet? Avez-vous des suggestions pour un programmeur novice utilisant console.error
vs console.log
?
console.log(...)
"non standard". À cet égard, console.error
est aussi stable que console.log
.
Si vous utilisez Firebug et devez également prendre en charge IE, Safari ou Opera, Firebug Lite ajoute la prise en charge de console.log () à ces navigateurs.
Le WebKit Web inspecteur prend également en charge de Firebug API de la console (juste un ajout mineur à la réponse de Dan ).
Une note sur 'throw ()' mentionnée ci-dessus. Il semble que cela arrête complètement l'exécution de la page (j'ai vérifié dans IE8), donc ce n'est pas très utile pour se connecter "sur les processus en cours" (comme pour suivre une certaine variable ...)
Ma suggestion est peut-être d'ajouter un élément textarea quelque part dans votre document et de changer (ou d'ajouter) sa valeur (ce qui changerait son texte) pour la journalisation des informations chaque fois que nécessaire ...
console.log()
, throw()
, etc. En outre, il est faux de rien avec le comportement de throw()
que vous semblez dire - le fait qu'il arrête l' exécution est intentionnel et documenté ( développeur. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ), et cela est cohérent avec la façon dont les exceptions sont levées / interceptées dans d'autres langages de programmation. (Si vous voulez enregistrer le contenu d'une variable sans arrêter l'exécution, c'est pour ça console.log()
.)
console.log
- donc les gens donnaient des alternatives. À propos de l' throw()
arrêt de l'exécution, bien sûr, c'est intentionnel, personne n'a dit que ce n'était pas le cas. C'est pourquoi ce n'est généralement pas un bon moyen de consigner les informations de débogage pendant l'exécution, ce que l'OP voulait ...
Comme toujours, Internet Explorer est le grand éléphant des patins à roulettes qui vous empêche simplement d'utiliser console.log()
.
Le journal de jQuery peut être adapté assez facilement, mais il est difficile de l'ajouter partout. Une solution si vous utilisez jQuery consiste à le placer dans votre fichier jQuery à la fin, minifié en premier:
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;
}
}
Visitez https://developer.chrome.com/devtools/docs/console-api pour une référence complète de l'api de la console
console.error(object[Obj,....])\
Dans ce cas, l'objet serait votre chaîne d'erreur
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 façon la plus simple de le faire est:
console.warn("Text to print on console");
Pour répondre à votre question, vous pouvez utiliser les fonctionnalités ES6,
var var=10;
console.log(`var=${var}`);
Cela n'imprime pas sur la console, mais vous ouvrira une fenêtre contextuelle d'alerte avec votre message qui pourrait être utile pour certains débogages:
fais juste:
alert("message");