Como posso imprimir uma mensagem no console de erro, preferencialmente incluindo uma variável?
Por exemplo, algo como:
print('x=%d', x);
Como posso imprimir uma mensagem no console de erro, preferencialmente incluindo uma variável?
Por exemplo, algo como:
print('x=%d', x);
Respostas:
Instale o Firebug e, em seguida, você pode usar console.log(...)
e console.debug(...)
etc. (consulte a documentação para obter mais informações).
console.log()
etc, devem funcionar em todos os navegadores, incluindo o IE. No entanto, em todos os casos, você precisa abrir a janela do depurador no momento, caso contrário, as chamadas para console
gerarão erros.
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
Você também pode adicionar CSS às suas mensagens de log:
console.log('%c My message here', "background: blue; color: white; padding-left:10px;");
console.log
você é capaz de usar css dentro do console: |
Exceções são registradas no console do JavaScript. Você pode usar isso se quiser manter o Firebug desativado.
function log(msg) {
setTimeout(function() {
throw new Error(msg);
}, 0);
}
Uso:
log('Hello World');
log('another message');
throw
deve ser embrulhado em um setTimeout
?
Uma boa maneira de fazer isso que funciona em vários navegadores é descrita em Depurando JavaScript: Jogue Fora Seus Alertas! .
throw()
definitivamente não é o caminho para fazer isso. você terá problemas mais cedo ou mais tarde. para mim foi mais cedo :(
Aqui está uma solução para a pergunta literal de como imprimir uma mensagem no console de erros do navegador, não no console do depurador. (Pode haver boas razões para ignorar o depurador.)
Como observei nos comentários sobre a sugestão de gerar um erro para obter uma mensagem no console de erros, um problema é que isso interromperá o encadeamento de execução. Se você não quiser interromper o encadeamento, poderá lançar o erro em um encadeamento separado, criado usando setTimeout. Daí a minha solução (que acaba sendo uma elaboração da de 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');
Incluo o tempo em milissegundos desde o horário de início, pois o tempo limite pode distorcer a ordem na qual você espera ver as mensagens.
O segundo argumento para o método Error é o nome do arquivo, que é uma string vazia aqui para impedir a saída do nome de arquivo e número de linha inúteis. É possível obter a função de chamada, mas não de uma maneira simples e independente do navegador.
Seria bom se pudéssemos exibir a mensagem com um ícone de aviso ou mensagem em vez do ícone de erro, mas não consigo encontrar uma maneira de fazer isso.
Outro problema com o uso do arremesso é que ele pode ser pego e jogado fora por um try-catch anexo, e colocar o arremesso em um thread separado evita esse obstáculo também. No entanto, existe ainda outra maneira pela qual o erro pode ser detectado, ou seja, se o manipulador window.onerror for substituído por um que faça algo diferente. Não posso ajudá-lo lá.
Para realmente responder à pergunta:
console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);
Em vez de erro, você também pode usar informações, log ou aviso.
console.error(..)
é um recurso não padrão e não deve ser usado na produção. Qual é a sua opinião sobre isso? Você tem alguma sugestão para um programador iniciante usando console.error
vs console.log
?
console.log(...)
"não-padrão". A esse respeito, console.error
é tão estável quanto console.log
.
Se você estiver usando o Firebug e também precisar oferecer suporte ao IE, Safari ou Opera, o Firebug Lite adiciona o suporte console.log () a esses navegadores.
O WebKit Web Inspector também suporta a API do console do Firebug (apenas uma pequena adição à resposta de Dan ).
Uma observação sobre 'throw ()' mencionada acima. Parece que interrompe a execução da página completamente (verifiquei no IE8), por isso não é muito útil para registrar "processos em andamento" (como rastrear uma determinada variável ...)
Minha sugestão é, talvez, para adicionar um textarea elemento em algum lugar no seu documento e para a mudança (ou anexar a) o seu valor (que mudaria seu texto) para obter informações de log sempre que necessário ...
console.log()
, throw()
etc. Além disso, não há nada de errado com o comportamento throw()
que você parece sugerir - o fato de ele interromper a execução é intencional e documentado ( desenvolvedor. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ), e é consistente com a maneira como as exceções são lançadas / capturadas em outras linguagens de programação. (Se você quiser registrar o conteúdo de uma variável sem parar execução, que é o que console.log()
é para.)
console.log
- então as pessoas estavam dando alternativas. Sobre throw()
parar a execução, é claro que é intencional, ninguém disse que não. É por isso que geralmente É não uma boa maneira de registrar informações de depuração em tempo de execução, que o que o OP queria ...
Como sempre, o Internet Explorer é o grande elefante em patins que o impede de usar console.log()
.
O log do jQuery pode ser adaptado com bastante facilidade, mas é uma dor ter que adicioná-lo a qualquer lugar. Uma solução se você estiver usando o jQuery é colocá-lo no seu arquivo jQuery no final, minificado primeiro:
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;
}
}
Visite https://developer.chrome.com/devtools/docs/console-api para obter uma referência completa da API do console
console.error(object[Obj,....])\
Nesse caso, o objeto seria sua string de erro
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");
A maneira mais simples de fazer isso é:
console.warn("Text to print on console");
Para responder sua pergunta, você pode usar os recursos do ES6,
var var=10;
console.log(`var=${var}`);
Isso não é impresso no console, mas abre um pop-up de alerta com sua mensagem, que pode ser útil para algumas depurações:
apenas faça:
alert("message");