Cuidado com o console.log(), ele pode te causar problemas

Cenário de hoje, o mapa(Google Maps) do sistema que eu mexo estava dando problemas com alguns clientes, mas aqui estava perfeito. Ouvi muita reclamação do meu chefe e com a ajuda do @raphaelivan chegamos a conclusão que o problema era o zoom. Ele ficava com zoom bizarro e ponto final, quando mexiam no zoom ele focava na Somália(Oo).

Por questão de segurança pedi pro raphael ver se no notebook dele o problema também existia, então foi a primeira surpresa: no Chrome estava normal, o problema era com o Firefox.

Abri meu Firefox e o mapa abria normal(estava com o firebug ligado). Como o firebug estava ocupando muito espaço na tela resolvi fechar ele, em seguida me veio a idéia “está normal por causa do cache, vamo ver se com F5 a coisa pauleia”, dei o F5 e o mapa realmente pauleou.

Mapa pauleado, então chegou a hora de ver o erro, mas o firebug só processa javascript que aconteça enquanto ele está rodando, por isso precisei abrir ele e recarregar a página. Para a minha surpresa o mapa estava normal agora. Vagando mentalmente pelo Reino das pipocas que possuem antena, buscando a resposta para tal problema que desafiava as leis do complexo pensamento “Agora funciona. Agora não funciona.”, eu percebi que havia um log de um objeto no firebug, nesse momento descobri o problema instantâneamente com o pensamento “TNC!!! EH A PORRA DO CONSOLE.LOG MALDITO !!!”.

Linha removida, problema resolvido.

Mas digamos que você precisa deixar os console.log lá(app em dev?) e não tem saco de remover eles sempre que for fazer deploy, para isso você pode criar um fake console.log().

Simplesmente coloque esse código no primeiro JS que é carregado pela app:

if(typeof(console) == 'undefined') console = { log : function(){} };
if(typeof(console.log) != 'function') console.log = function(){};

Isso irá criar um console.log caso não exista, assim qualquer usuário terá essa função e você não precisará passar pelo que eu passei hoje.

4 thoughts on “Cuidado com o console.log(), ele pode te causar problemas

  1. Chrome 15.0.874.121 Windows 7

    Existe um outro detalhe sobre o console.log() as vezes o tempo de execução dele confunde as outras funções, já tive mais de um caso one uma determinadas funções não executavam na ordem que estava no código, em todas elas retirar o console.log resolveu o problema. Bizarro! Felizmente depois que atualizei para o Firefox 8.0.1 e o Firebug, não tive mais o problema.

  2. Firefox 12.0 MacIntosh

    Vou te dizer que onde eu trabalho, prefirimos ter uma função de log e lá dentro usamos a variavel debug (sempre passada para o JS), em que caso o sistema esteja em produção o modo debug é FALSE.
    E por final, fazemos um try{…}catch(e){} no console.log
    Em JS ficaria assim:
    function log(){
    if(debug){
    try{
    console.log.apply(console, arguments)
    } catch(e){}
    }
    }

    Acho essa solução mais agradável, resolvendo vários problemas AT SAME TIME. xD

Deixe uma resposta