JavaScript: come stampare un messaggio sulla console degli errori?


Risposte:


470

Installare Firebug e quindi è possibile utilizzare console.log(...)e console.debug(...), ecc. (Consultare la documentazione per ulteriori informazioni).


14
@Dan: WebKit Web Inspector supporta anche l'API della console
FireBug

160
perché questa è la risposta accettata? non ha chiesto come scrivere sulla console firebug, ha chiesto come scrivere sulla console degli errori. non essere un cazzone o altro, semplicemente sottolineandolo.
matt lohkamp,

127
+1. E a beneficio di chiunque arrivi a questa domanda ora, vale la pena sottolineare che da quando la domanda è stata risolta, tutti i browser hanno implementato l'oggetto console, quindi console.log()ecc dovrebbe funzionare in tutti i browser, incluso IE. Tuttavia, in tutti i casi, è necessario che la finestra del debugger sia aperta in quel momento, altrimenti le chiamate a consolegenereranno errori.
Spudley,

2
@andrewjackson come notato in precedenza, console.log funziona bene in tutti i browser moderni, incluso IE. Il tuo codice è ancora perfettamente valido e utile se intendi supportare i browser più vecchi (e se stai lavorando su un sito Web pubblico, sei sicuro che diamine dovrebbe!), Tuttavia la mia critica è solo che il tuo commento è fuorviante / non accurato.
BrainSlugs83

1
console.debug () d'altra parte non esiste in IE. Possiamo aggirare il problema con: 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

È inoltre possibile aggiungere CSS ai messaggi di registrazione:

console.log('%c My message here', "background: blue; color: white; padding-left:10px;");


10
Questa è la risposta corretta La parola "errore" non è nemmeno menzionata nella risposta selezionata, sebbene sia nel titolo della domanda.
Ivan Durst,

3
L'aggiunta di CSS è piuttosto divertente. +1!
sudo make installa il

@ORMapper Cosa non funziona lì? Il CSS presumo?
Nicholas

2
Nel momento in cui ti rendi conto che, in tutti questi anni di utilizzo, console.logsei in grado di utilizzare css all'interno della console: |
Rosso,

86

Le eccezioni vengono registrate nella console JavaScript. Puoi usarlo se vuoi mantenere Firebug disabilitato.

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

Uso:

log('Hello World');
log('another message');

8
In alcuni browser, se hai abilitato il debug, questo genererà messaggi pop-up.
BrainSlugs83

Potresti spiegare perché il motivo throwdeve essere racchiuso in un setTimeout?
Antony,

55

Un buon modo per farlo che funziona su più browser è descritto in Debugging JavaScript: butta via i tuoi avvisi! .


7
throw () è un ottimo suggerimento: questa dovrebbe essere la risposta scelta.
matt lohkamp,

17
D'accordo, questo è un approccio cross-browser. Ma .. L'eccezione non è fondamentalmente diversa dalla registrazione dei messaggi?
Robin Maben,

14
D'altra parte, lanciare un'eccezione interromperà l'esecuzione dell'attuale "thread" (come notato da Yuval A), e riprenderà il fermo se ce n'è uno. Dubito che sia ciò che si desidera.
dlaliberte,

7
throw()non è sicuramente il modo di farlo. ti metterai nei guai prima o poi. per me è stato prima :(
Hugo Mota il

4
@Ian_Oxley: a un certo punto era inattivo, ora è il backup, ma pubblicare il codice qui è ancora meglio, e raccomandato dalle migliori pratiche di StackOverflow.
woohoo,

15

Ecco una soluzione alla domanda letterale su come stampare un messaggio sulla console degli errori del browser, non sulla console del debugger. (Potrebbero esserci buoni motivi per aggirare il debugger.)

Come ho notato nei commenti sul suggerimento di lanciare un errore per ottenere un messaggio nella console degli errori, un problema è che questo interromperà il thread di esecuzione. Se non vuoi interrompere il thread, puoi lanciare l'errore in un thread separato, uno creato usando setTimeout. Da qui la mia soluzione (che risulta essere un'elaborazione di quella di 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');

Includo il tempo in millisecondi dall'ora di inizio perché il timeout potrebbe distorcere l'ordine in cui ci si potrebbe aspettare di vedere i messaggi.

Il secondo argomento del metodo Error è per il nome file, che è una stringa vuota qui per impedire l'output del nome file e del numero di riga inutili. È possibile ottenere la funzione chiamante ma non in un modo indipendente dal browser.

Sarebbe bello se potessimo visualizzare il messaggio con un'icona di avviso o messaggio invece dell'icona di errore, ma non riesco a trovare un modo per farlo.

Un altro problema con l'uso del tiro è che potrebbe essere catturato e gettato via da un tentativo di presa incluso, e mettere il tiro in un filo separato evita anche quell'ostacolo. Tuttavia, esiste ancora un altro modo in cui l'errore potrebbe essere rilevato, ad esempio se il gestore window.onerror viene sostituito con uno che fa qualcosa di diverso. Non posso aiutarti lì.


15

Se usi Safari , puoi scrivere

console.log("your message here");

e appare proprio sulla console del browser.


11
Supporto per tutti i browser moderni console.log().
JJJ,

2
Tutti i browser moderni ADESSO supportano console.log(). Non era vero fino a poco tempo fa.
Bryce,

9

Per rispondere effettivamente alla domanda:

console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);

Invece di errore, puoi anche utilizzare informazioni, accedere o avvisare.


La tua risposta sembra migliore, ma la pagina MDN di Mozilla dice che console.error(..)è una funzionalità non standard e non dovrebbe essere usata in produzione. Cosa ne pensi di questo? Hai qualche suggerimento per un programmatore alle prime armi che usa console.errorvs console.log?
Modulitos,

Questo è interessante. Non dovremmo usare questo allora. Grazie per le informazioni, Lucas.
Yster,

2
Anche MDN ritiene console.log(...)"non standard". A tal proposito, console.errorè stabile come console.log.
Mike Rapadas,

1
@Lucas A chi importa se è standard? Chi utilizzerà la registrazione della console per la produzione?
Andrew,

Console.error funziona ora in tutti i principali browser. Anche IE8. Vedi developer.mozilla.org/en-US/docs/Web/API/Console/error
Red

8

Se stai utilizzando Firebug e devi supportare anche IE, Safari o Opera, Firebug Lite aggiunge il supporto console.log () a questi browser.


2
Wow .. Firebug Lite è fantastico
Dexter


5

Una nota su "throw ()" di cui sopra. Sembra che interrompa completamente l'esecuzione della pagina (ho verificato in IE8), quindi non è molto utile per la registrazione di "processi in corso" (come tenere traccia di una certa variabile ...)

Il mio suggerimento è forse quello di aggiungere un elemento textarea da qualche parte nel tuo documento e di modificarne (o aggiungerlo a) il suo valore (che cambierebbe il suo testo) per la registrazione delle informazioni ogni volta che è necessario ...


Immagino sia perché non hai risposto alla domanda del PO. Per stampare sulla console JS, è necessario utilizzare un metodo integrato come console.log(), throw()ecc. Inoltre, non vi è nulla di sbagliato nel comportamento di throw()come sembra implicare: il fatto che interrompa l'esecuzione è intenzionale e documentato ( sviluppatore. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) ed è coerente con il modo in cui le eccezioni vengono generate / catturate in altri linguaggi di programmazione. (Se si desidera registrare il contenuto di una variabile senza interrompere l'esecuzione, questo è quello che console.log()serve.)
Sean the Bean,

@SeantheBean, inizialmente c'era una discussione sul fatto che IE non supportava console.log, quindi le persone davano alternative. A proposito di throw()interrompere l'esecuzione, ovviamente è intenzionale, nessuno ha detto che non lo è. Ecco perché di solito non è un buon modo per registrare le informazioni di debug in runtime, cosa che l'OP voleva ...
Yuval A.

5

Come sempre, Internet Explorer è il grande elefante nei pattini a rotelle che ti blocca semplicemente usando console.log().

Il registro di jQuery può essere adattato abbastanza facilmente, ma è un dolore doverlo aggiungere ovunque. Una soluzione se stai usando jQuery è metterlo nel tuo file jQuery alla fine, minimizzato prima:

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;
    }
}

Ora è accettato come estensioni di jQuery, ma non sarebbe più efficiente verificare se esistono oggetti "console" e "opera" prima di prendere l'eccezione?
Marinaio danubiano il

@lechlukasz Penso che tu possa salvare il sovraccarico dell'estensione e usare solo console.log più questo controllo 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");


1
console.log("your message here");

lavoro per me .. sto cercando questo .. ho usato Firefox. ecco la mia sceneggiatura.

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

funziona in Firefox e Chrome.



1

Per rispondere alla tua domanda puoi utilizzare le funzionalità ES6,

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

0

Questo non viene stampato sulla console, ma ti aprirà un popup di avviso con il tuo messaggio che potrebbe essere utile per alcuni debug:

basta fare:

alert("message");

Non è niente in comune di ciò che ha chiesto l'OP
Zefir Zdravkov,

0

Con la sintassi es6 puoi usare:

console.log(`x = ${x}`);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.