Come posso stampare un messaggio sulla console degli errori, preferibilmente includendo una variabile?
Ad esempio, qualcosa del tipo:
print('x=%d', x);
Come posso stampare un messaggio sulla console degli errori, preferibilmente includendo una variabile?
Ad esempio, qualcosa del tipo:
print('x=%d', x);
Risposte:
Installare Firebug e quindi è possibile utilizzare console.log(...)
e console.debug(...)
, ecc. (Consultare la documentazione per ulteriori informazioni).
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 console
genereranno errori.
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;");
console.log
sei in grado di utilizzare css all'interno della console: |
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');
throw
deve essere racchiuso in un setTimeout
?
Un buon modo per farlo che funziona su più browser è descritto in Debugging JavaScript: butta via i tuoi avvisi! .
throw()
non è sicuramente il modo di farlo. ti metterai nei guai prima o poi. per me è stato prima :(
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ì.
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.
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.error
vs console.log
?
console.log(...)
"non standard". A tal proposito, console.error
è stabile come console.log
.
Se stai utilizzando Firebug e devi supportare anche IE, Safari o Opera, Firebug Lite aggiunge il supporto console.log () a questi browser.
Il WebKit Web Inspector supporta anche di Firebug console API (solo una piccola aggiunta alla risposta di Dan ).
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 ...
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.)
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 ...
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;
}
}
Visita https://developer.chrome.com/devtools/docs/console-api per un riferimento completo alla API della console
console.error(object[Obj,....])\
In questo caso, l'oggetto sarebbe la tua stringa di errore
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");
Il modo più semplice per farlo è:
console.warn("Text to print on console");
Per rispondere alla tua domanda puoi utilizzare le funzionalità ES6,
var var=10;
console.log(`var=${var}`);
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");