web-dev-qa-db-fra.com

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

Comment puis-je imprimer un message sur la console d'erreur, de préférence avec une variable? 

Par exemple, quelque chose comme:

print('x=%d', x);
427
Mark Harrison

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

457
Dan
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: black; padding-left:10px;");
301
Nicholas

Les exceptions sont consignées dans la console JavaScript. Vous pouvez l'utiliser si vous souhaitez conserver Firebug disabled.

function log(msg) {
    setTimeout(function() {
        throw new Error(msg);
    }, 0);
}

Usage:

log('Hello World');
log('another message');
84
Ivo Danihelka

Un bon moyen de faire cela qui fonctionne avec plusieurs navigateurs est décrit dans Débogage de JavaScript: jetez vos alertes!.

55
Ian Oxley

Si vous utilisez Safari , vous pouvez écrire

console.log("your message here");

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

15
Lukas

Voici une solution à la question littérale de savoir comment imprimer un message sur la console d’erreur du navigateur, pas sur la console du débogueur. (Il peut y avoir de bonnes raisons de contourner le débogueur.)

Comme je l'ai noté dans des commentaires sur la suggestion de générer une erreur pour obtenir un message dans la console d'erreur, l'un des problèmes est que cela interrompra le thread d'exécution. Si vous ne souhaitez pas interrompre le fil, vous pouvez envoyer l'erreur dans un fil distinct, créé à l'aide de setTimeout. D'où ma solution (qui s'avère ê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 pour empêcher la sortie du nom de fichier et du numéro de ligne inutiles. Il est possible d’obtenir la fonction d’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 peux pas trouver un moyen de le faire.

Un autre problème lié à l’utilisation du lancer est qu’il peut être attrapé et jeté par un try-catch enfermé. Le fait de placer le lancer dans un fil séparé évite également cet obstacle. Cependant, l'erreur peut être interceptée d'une autre manière, à savoir si le gestionnaire window.onerror est remplacé par un autre qui fait autre chose. Je ne peux pas vous aider là-bas.

14
dlaliberte

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.

9
Yster

Si vous utilisez Firebug et que vous devez également supporter IE, Safari ou Opera, Firebug Lite ajoute le support console.log () à ces navigateurs.

8
Devon

Comme toujours, Internet Explorer est le gros éléphant en 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. Si vous utilisez jQuery, une solution consiste à le placer dans votre fichier jQuery à la fin, en commençant par minified:

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;
    }
}
5
Chris S

Une note à propos de '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 la journalisation "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 modifier (ou d'ajouter à) son value (qui changerait son texte) pour la journalisation des informations si nécessaire ...

5
Yuval A.

WebKit Web Inspector prend également en charge l'API de console de Firebug (un ajout mineur à la réponse de Dan ).

5
olliej

Visitez https://developer.chrome.com/devtools/docs/console-api pour une référence complète de l'API de console

    console.error(object[Obj,....])\

Dans ce cas, l'objet serait votre chaîne d'erreur

4
devSouth555

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

3
Parth Raval
console.log("your message here");

travaillant pour moi .. je recherche ceci .. j'ai utilisé Firefox . voici mon script.

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

fonctionne dans Firefox et Chrome.

1
D.K

La manière la plus simple de faire ceci est:

console.warn("Text to print on console");
1

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

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

Avec la syntaxe es6, vous pouvez utiliser:

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

Cela n’imprimera pas sur la console, mais vous ouvrira une alerte Popup avec votre message qui pourrait être utile pour le débogage:

il suffit de faire:

alert("message");
0
mmm