JavaScript: comment imprimer un message sur la console d'erreur?

438

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);
Mark Harrison
la source
8
De quelle console parlez-vous? Console de navigateur ou console spécifique au framework JavaScript?
Eric Schoonover

Réponses:

470

Installez Firebug puis vous pouvez utiliser console.log(...)et console.debug(...), etc. (voir la documentation pour plus).

Dan
la source
14
@Dan: WebKit Web Inspector prend également en charge l'API de la console
FireBug
160
pourquoi est-ce la réponse acceptée? il n'a pas demandé comment écrire dans la console firebug, il a demandé comment écrire dans la console d'erreur. ne pas être une bite ou quoi que ce soit, juste le souligner.
matt lohkamp
127
+1. Et pour le bénéfice de quiconque arrive à cette question maintenant, il convient de noter que depuis la réponse à la question, tous les navigateurs ont maintenant implémenté l'objet console, donc 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 à consolegénéreront des erreurs.
Spudley
2
@andrewjackson, comme indiqué précédemment, console.log fonctionne correctement dans tous les navigateurs modernes, y compris IE. Votre code est toujours parfaitement valide et utile si vous avez l'intention de prendre en charge des navigateurs plus anciens (et si vous travaillez sur un site Web public, vous devriez bien sûr!), Mais ma critique est seulement que votre commentaire est trompeur / inexact.
BrainSlugs83
1
console.debug () d'autre part n'existe pas dans IE. Nous pouvons contourner cela avec: if (! Console.debug) {console.debug = function (args) {console.log (args); }}
Rovanion
319
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;");
Nicolas
la source
8
Documentation pour Chrome: developers.google.com/chrome-developer-tools/docs/console
mrzmyr
10
Ceci est la bonne réponse. Le mot "erreur" n'est même pas mentionné dans la réponse sélectionnée, bien qu'il soit dans le titre de la question.
Ivan Durst
3
Le petit plus sur l'ajout de CSS est assez amusant. +1!
sudo make install le
@ORMapper Qu'est-ce qui ne fonctionne pas là-bas? Le CSS que j'assume?
Nicholas
2
Au moment où vous vous rendez compte que, toutes ces années d'utilisation, console.logvous pouvez utiliser css à l'intérieur de la console: |
Red
86

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');
Ivo Danihelka
la source
8
Dans certains navigateurs, si le débogage est activé, cela affichera des messages contextuels.
BrainSlugs83
Pourriez-vous s'il vous plaît expliquer pourquoi le throwdoit être emballé dans un setTimeout?
Antony
55

Une bonne façon de faire cela qui fonctionne sur plusieurs navigateurs est décrite dans Débogage JavaScript: Jetez vos alertes! .

Ian Oxley
la source
7
throw () est une excellente suggestion - ce devrait être la réponse choisie.
matt lohkamp
17
D'accord, c'est une approche multi-navigateur. Mais .. Le fait de lever une exception n'est-il pas fondamentalement différent des messages de journalisation?
Robin Maben
14
D'un autre côté, lever une exception arrêtera l'exécution du "thread" actuel (comme noté par Yuval A), et le reprendra dans le catch s'il y en a un. Je doute que c'est ce que l'on souhaite.
dlaliberte
7
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 :(
Hugo Mota
4
@Ian_Oxley: il était en panne à un moment donné, il est maintenant de retour, mais publier le code ici est toujours mieux, et recommandé par les meilleures pratiques de stackoverflow.
woohoo
15

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.

dlaliberte
la source
15

Si vous utilisez Safari , vous pouvez écrire

console.log("your message here");

et il apparaît directement sur la console du navigateur.

Lukas
la source
11
Tous les navigateurs modernes prennent en charge console.log().
JJJ
2
Tous les navigateurs modernes prennent en charge MAINTENANT console.log(). Ce n'était pas vrai jusqu'à récemment.
Bryce
9

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.

Yster
la source
Votre réponse semble la meilleure, mais la page MDN de Mozilla indique qu'il 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.errorvs console.log?
modulitos
C'est intéressant. Nous ne devrions pas utiliser cela alors. Merci pour l'info, Lucas.
Yster
2
MDN juge également console.log(...)"non standard". À cet égard, console.errorest aussi stable que console.log.
Mike Rapadas
1
@Lucas Qui se soucie si c'est standard? Qui va utiliser la consignation de console pour la production?
Andrew
Console.error fonctionne maintenant dans tous les principaux navigateurs. Même IE8. Voir developer.mozilla.org/en-US/docs/Web/API/Console/error
Red
8

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.

Devon
la source
2
Wow .. Firebug Lite est génial
Dexter
6

Le WebKit Web inspecteur prend également en charge de Firebug API de la console (juste un ajout mineur à la réponse de Dan ).

olliej
la source
Très joli WebKit le supporte. Il est donc assez largement pris en charge alors. Génial!
Albus Dumbledore
5

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 ...

Yuval A.
la source
Je suppose que c'est parce que vous n'avez pas répondu à la question du PO. Pour imprimer à la console JS, vous devez utiliser une méthode intégrée comme 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().)
Sean the Bean
@SeantheBean, à l'origine, il y avait une discussion sur le fait que IE ne supportait pas 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 ...
Yuval A.
5

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;
    }
}
Chris S
la source
Il est maintenant accepté comme extensions de jQuery, mais ne serait-il pas plus efficace de vérifier si des objets 'console' et 'opera' existent avant de capturer une exception?
Danubian Sailor
@lechlukasz Je pense que vous pouvez économiser les frais généraux de l'extension et utiliser simplement console.log plus cette vérification IE: stackoverflow.com/questions/1215392/…
Chris S
3

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");

Parth Raval
la source
1
console.log("your message here");

travailler pour moi .. je recherche cela .. j'ai utilisé Firefox. voici mon script.

 $('document').ready(function() {
console.log('all images are loaded');
});

fonctionne dans Firefox et Chrome.

DK
la source
1

La façon la plus simple de le faire est:

console.warn("Text to print on console");
Kenneth John Falbous
la source
1

Pour répondre à votre question, vous pouvez utiliser les fonctionnalités ES6,

var var=10;
console.log(`var=${var}`);
Aniket Kulkarni
la source
0

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");
mmm
la source
Ce n'est rien en commun de ce que OP a demandé
Zefir Zdravkov
0

Avec la syntaxe es6, vous pouvez utiliser:

console.log(`x = ${x}`);
jkordas
la source