Salve o console.log no Chrome em um arquivo

172

Alguém sabe uma maneira de salvar a saída console.log no Chrome em um arquivo? Ou como copiar o texto do console?

Digamos que você esteja executando algumas horas de testes funcionais e tenha milhares de linhas de saída console.log no Chrome. Como você o salva ou exporta?

eeejay
fonte

Respostas:

97

Eu precisava fazer a mesma coisa e esta é a solução que encontrei:

  1. Ative o log na linha de comando usando os sinalizadores:

    --enable-logging --v=1

    Isso registra tudo o que o Chrome faz internamente, mas também registra todas as console.log()mensagens. O arquivo de log é chamado chrome_debug.loge está localizado no User Data Directory.

  2. Filtre o arquivo de log para obter linhas CONSOLE(\d+).

Observe que os logs do console não aparecem com --incognito.

Waleed Abdulla
fonte
3
parece que não funciona no meu mac, há registros internos, mas não CONSOLE.LOG ...
Nico
7
Isso não salva as informações do console.log no arquivo de log. No Windows 8.
coderama
4
No Mac eu encontrei o arquivo de log em ~ / Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar
2
Isso ainda funciona para mim no OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1com o log salvo em~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb
3
Não recebo nada além dos logs internos do chrome. Minhas console.log()linhas não estão em nenhum lugar nesse arquivo. Alguém tem uma solução para isso?
xandermonkey
186

Boas notícias

As ferramentas de desenvolvimento do Chrome agora permitem salvar a saída do console em um arquivo nativo

  1. Abra o console
  2. Clique com o botão direito
  3. Selecione "salvar como .."

salvar console no arquivo

Instruções para desenvolvedor do Chrome aqui .

adardesign
fonte
3
Isso pode ser feito usando um atalho de teclado ou executando um comando no console?
Sarthak Singhal
1
Aqui está uma lista de todos os atalhos do devTools developer.chrome.com/devtools/docs/shortcuts
adardesign
11
Isso não parece copiar o rastreamento de pilha
Michael
2
Você pode abrir esse arquivo no console novamente? Se sim, como você faz isso?
Mahathi Vempati
7
Observe que isso não expandirá objetos - ainda imprimirá objetos grandes em sua forma truncada, por exemplo {a: 1, b: 2, c: 3, ...}.
Galen Long
29

Existe um plugin javascript de código aberto que faz exatamente isso, mas para qualquer navegador - debugout.js

Debugout.js registra e salva console.logs para que seu aplicativo possa acessá-los. Divulgação completa, eu escrevi. Ele formata diferentes tipos adequadamente, pode manipular objetos e matrizes aninhados e, opcionalmente, pode colocar um carimbo de data / hora ao lado de cada log. Você também pode alternar o live-log em um local e sem precisar remover todas as suas instruções de log.

inorganik
fonte
4
Para referência, embora isso pareça uma ótima ferramenta, ele não capturará a saída do navegador, como quando as cargas de imagem falham ou outra saída de console interna e requer que você reescreva suas instruções de log usando uma sintaxe especial.
Lukus 13/04
@ Lucas, certamente não capturará a saída do navegador (você precisaria de um patch de macaco para fazer isso), mas não há sintaxe especial necessária. passar os mesmos argumentos como seria de console.log
inorganik
1
@Inorganik Eu estava procurando uma maneira de os testes de selênio capturarem a saída do console, mas ele será usado para um serviço de teste, para que não tenhamos o controle dos sites dos usuários. Eu acho que sua ferramenta é legal, mas exigiria que o usuário reescrevesse suas instruções console.log existentes como bugout.log, é isso que eu quis dizer com sintaxe especial. Parece até agora que não há uma maneira entre navegadores de fazê-lo neste momento.
Lukus
Não, não vai funcionar para nós. Precisamos salvar o log de resultado dos testes do site complexo com grande quantidade de scripts de terceiros, que são executados em domínios diferentes e não podemos alterar a maioria deles.
Mike Keskinov 07/07
22

Eu encontrei uma maneira ótima e fácil para isso.

  1. No console - clique com o botão direito do mouse no objeto registrado no console

  2. Clique em 'Armazenar como variável global'

  3. Veja o nome da nova variável - por exemplo, é variableName1

  4. Digite no console: JSON.stringify (variableName1)

  5. Copie o conteúdo da sequência variável: por exemplo, {"a": 1, "b": 2, "c": 3}

insira a descrição da imagem aqui

  1. Vá para algum editor online do JSON: por exemplo, https://jsoneditoronline.org/

insira a descrição da imagem aqui

Combinar
fonte
1
Parece desajeitado na superfície, mas funciona muito bem. Nas versões posteriores, na parte inferior da saída, há um botão "Copiar". Eu apenas pressiono isso e, em seguida, tenho um pequeno script que salva a área de transferência como um arquivo .json e é aberto no Visual Studio, que é muito legível. A única alteração é que eu faço JSON.stringify (temp1, null, 2) para facilitar a leitura. O truque abaixo para salvar o console também funciona bem.
Wade Hatler
8

Para um melhor arquivo de log (sem o absurdo de depuração do Chrome), use:

--enable-logging --log-level=0

em vez de --v=1apenas informações demais.

Ele ainda fornecerá os erros e avisos como você normalmente vê no console do Chrome.

update 18 de maio de 2020: Na verdade, acho que isso não é mais verdade. Não consegui encontrar as mensagens do console em qualquer nível de registro.

JohnP2
fonte
7

Isso pode ou não ser útil, mas no Windows você pode ler o log do console usando o Rastreio de Eventos para Windows

http://msdn.microsoft.com/en-us/library/ms751538.aspx

Nossos testes de integração são executados no .NET, então eu uso esse método para adicionar o log do console à nossa saída de teste. Fiz um projeto de console de amostra para demonstrar aqui: https://github.com/jkells/chrome-trace

--enable-logging --v = 1 parece não funcionar na versão mais recente do Chrome.

Jared Kells
fonte
3

Muitas respostas boas, mas por que não usar JSON.stringify (sua_variável)? Em seguida, pegue o conteúdo via copiar e colar (remova aspas externas). Também postei essa mesma resposta em: Como salvar a saída de um console.log (objeto) em um arquivo?

user1889992
fonte
1
Para questões sobre " TypeError não detectado: convertendo estrutura circular para JSON " , talvez isso possa ajudar.
precisa saber é o seguinte
2

Há outra ferramenta de código aberto que permite salvar toda a console.logsaída em um arquivo no servidor - JS LogFlush (plug!).

JS LogFlush é uma solução integrada de log JavaScript que inclui:

  • substituição de console.log, sem interface do usuário, em navegador do lado do cliente.
  • sistema de armazenamento de log - no lado do servidor.

Demo

mais atrasado
fonte
2

Se você estiver executando um servidor Apache no seu host local (não faça isso em um servidor de produção), também poderá postar os resultados em um script em vez de gravá-lo no console.

Então, em vez de console.log, você pode escrever:

JSONP('http://localhost/save.php', {fn: 'filename.txt', data: json});

Então save.phppode fazer isso

<?php

 $fn = $_REQUEST['fn'];
 $data = $_REQUEST['data'];

 file_put_contents("path/$fn", $data);
supersan
fonte
1
Eu realmente espero que ninguém faça o upload para um servidor em produção. Isso é feito com perigo para o servidor.
Dave Mackintosh
Você não leu a primeira linha: "Se você estiver executando um servidor Apache no seu host local"?
supersan
Seu voto negativo na minha postagem não se justifica, porque isso seria incrivelmente tolo para alguém executar um servidor de produção no "localhost" (onde o JSONP solicita a publicação de dados).
supersan
Eu nunca votei na sua resposta, apenas apontei o perigo que esse script representa se algum dia foi enviado para um servidor disponível ao público.
Dave Mackintosh
1

No Linux (pelo menos), você pode configurar CHROME_LOG_FILE no ambiente para que o chrome grave um log da atividade do console no arquivo nomeado sempre que for executado. O log é substituído toda vez que o chrome é iniciado. Dessa forma, se você tiver uma sessão automatizada que execute o chrome, não precisará alterar a maneira como o chrome é iniciado e o log estará lá após o término da sessão.

exportar CHROME_LOG_FILE = chrome.log

DrChandra
fonte
0

Hoje em dia é muito fácil - clique com o botão direito do mouse em qualquer item exibido no log do console e selecione salvar como e salve toda a saída do log em um arquivo no seu computador.

brianlmerritt
fonte
0

as outras soluções neste segmento não estavam funcionando no meu mac. Aqui está um criador de logs que salva uma representação de string de forma intermitente usando ajax. use-o com em console.savevez deconsole.log

var logFileString="";
var maxLogLength=1024*128;

console.save=function(){
  var logArgs={};

  for(var i=0; i<arguments.length; i++) logArgs['arg'+i]=arguments[i];
  console.log(logArgs);

  // keep a string representation of every log
  logFileString+=JSON.stringify(logArgs,null,2)+'\n';

  // save the string representation when it gets big
  if(logFileString.length>maxLogLength){
    // send a copy in case race conditions change it mid-save
    saveLog(logFileString);
    logFileString="";
  }
};

dependendo do que você precisa, você pode salvar essa string ou apenas console.logela e copiar e colar. aqui está um ajax para você, caso você queira salvá-lo:

function saveLog(data){
  // do some ajax stuff with data.
  var xhttp = new XMLHttpRequest();

  xhttp.onreadystatechange = function(){
    if (this.readyState == 4 && this.status == 200) {}
  }

  xhttp.open("POST", 'saveLog.php', true);
  xhttp.send(data);
}

o saveLog.phpdeve anexar os dados a um arquivo de log em algum lugar. Eu não precisava dessa parte, então não a incluo aqui. :)

https://www.google.com/search?q=php+append+to+log

jaya
fonte