Como salvar a saída de um console.log (objeto) em um arquivo?

239

Eu tentei usar JSON.stringify(object), mas não cai em toda a estrutura e hierarquia.

Por outro lado console.log(object) faz isso, mas não posso salvá-lo.

Na console.logsaída, posso expandir um por um todos os filhos e selecionar e copiar / colar, mas a estrutura é grande demais para isso.

Eduard Florinescu
fonte
Você está tentando salvar o console.log do navegador para fins de desenvolvimento? Pode ajudar se você explicar qual é seu objetivo final.
Travis
1
@ MichaelS Não encontrei o objeto no arquivo de log.
Eduard Florinescu 7/08/2012
@travis Eu quero exportar um objeto para JSON, mas toda a hierarquia, também suas propriedades e as propriedades de suas propriedades. Quero praticamente obter a "interface" de um objeto, exceto a implementação das funções.
Eduard Florinescu
2
@ MichaelS, essas perguntas são sobre como salvar o log inteiro, essa questão é sobre como salvar um único objeto. Eles são distintos do meu ponto de vista.
James McMahon

Respostas:

306

Atualização: agora você pode apenas clicar com o botão direito

Clique com o botão direito do mouse em> Salvar como no painel Console para salvar as mensagens registradas em um arquivo.

Resposta original:

Você pode usar esse snippet de devtools mostrado abaixo para criar um método console.save. Ele cria um FileBlob a partir da entrada e o baixa automaticamente.

(function(console){

console.save = function(data, filename){

    if(!data) {
        console.error('Console.save: No data')
        return;
    }

    if(!filename) filename = 'console.json'

    if(typeof data === "object"){
        data = JSON.stringify(data, undefined, 4)
    }

    var blob = new Blob([data], {type: 'text/json'}),
        e    = document.createEvent('MouseEvents'),
        a    = document.createElement('a')

    a.download = filename
    a.href = window.URL.createObjectURL(blob)
    a.dataset.downloadurl =  ['text/json', a.download, a.href].join(':')
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    a.dispatchEvent(e)
 }
})(console)

Fonte: http://bgrins.github.io/devtools-snippets/#console-save

Patrick
fonte
2
Eu não sou daqueles que soltam "Obrigado" em todos os lugares até que a resposta seja bloqueada para evitar agradecimentos. Mas obrigada. Vou construir uma extensão.
Léon Pelletier
14
O recurso Salvar como ... na verdade não ajudou. Ele não salva o objeto JSON completo (no meu caso, eu tinha uma matriz de objetos, as propriedades dos objetos não foram exportadas no arquivo de saída). Mas, esperançosamente, o bom e velho fragmento de ferramenta que você colou funcionou como um encanto. Obrigado
M. Kejji
1
se salvar como não funcionou, será uma regressão. você deve arquivar um bug no crbug.com
Patrick
1
@ ishandutta2007, você não deve baixar nenhum trecho - ele está embutido no console agora.
Patrick
10
O clique com o botão direito do mouse não realizará um salvamento profundo do objeto.
usar o seguinte comando
245

Caso você tenha um objeto registrado:

  • Clique com o botão direito do mouse no objeto no console e clique em Store as a global variable
  • a saída será algo como temp1
  • digite no console copy(temp1)
  • cole no seu editor de texto favorito
artemdev
fonte
1
Também descobri que, colando isso no konklone.io/json, você pode colocar isso rapidamente em um arquivo CSV e, a partir daí, no Excel.
PeteW
9
Eu só recebo [objeto Objeto] #
norbidrak
1
O console diz "indefinido", mas isso não significa se falhou. Ainda copia para a área de transferência :)
Dean
1
Solução INCRÍVEL. Muito obrigado!
Ben Rondeau
1
De longe, a solução mais simples e confiável!
Chris B.
130

Você pode usar o comando da APIcopy() do Chrome DevTools Utilities para copiar a representação em cadeia do objeto especificado para a área de transferência.

Se você tiver muitos objetos, poderá realmente JSON.stringify () todos os seus objetos e continuar anexando-os a uma string. Agora use o copy()método para copiar a seqüência completa para a área de transferência.

bthota
fonte
13
Uso: copy (object)
antoine
Nota: você pode usar emrequire("util").format(...) vez de aplicar JSON.stringify()um por um. O utilmódulo no NPM funciona nos navegadores Node.js e na web.
Jun / 2010
2
Se você digitar copy (objeto) e ele retornar 'indefinido', isso é realmente um sucesso. O objeto está agora na sua área de transferência e pode ser colado.
decano
7

Existe um plugin javascript de código aberto que faz exatamente isso - 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. Também alterna o registro em tempo real em um só lugar.

inorganik
fonte
Estou recebendo um erro - #SyntaxError: export declarations may only appear at top level of a module --> debugout.js:9
Senura Dissanayake
@SenuraDissanayake tentar agora - eu tive que alguém revert PR que eu não fiz teste: /
inorganik
3

clique com o botão direito do mouse no console .. clique em salvar como .. é simples assim .. você obterá um arquivo de texto de saída

Akhil_S
fonte
apenas sem qualquer indicação do que é erro vs diminuição versus log.
Paulius Liekis
2

Você pode usar a biblioteca l2i( https://github.com/seriyvolk83/logs2indexeddb ) para salvar tudo o que colocar console.log e depois chamar

l2i.download();

para baixar um arquivo com logs.

Alexander Volkov
fonte
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 de log JavaScript integrada que inclui:

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

Demo

mais atrasado
fonte
2

É muito tarde para a festa, mas talvez ajude alguém. Minha solução parece semelhante ao que o OP descreveu como problemático, mas talvez seja um recurso que o Chrome ofereça agora, mas não nesse momento. Tentei clicar com o botão direito do mouse e salvar o arquivo .log após a gravação do objeto no console, mas tudo o que me deu foi um arquivo de texto com isso:

console.js: 230 Concluído: Matriz (50000) [0… 9999] [10000… 19999] [20000… 29999] [30000… 39999] [40000… 49999] comprimento: 50000__proto__: Matriz (0)

que não tinha utilidade para ninguém.

O que acabei fazendo foi encontrar o console.log(data)código, soltar um ponto de interrupção nele e digitar JSON.Stringify(data)no console que exibia o objeto inteiro como uma string JSON, e o console do Chrome realmente oferece um botão para copiá-lo . Em seguida, cole em um editor de texto e lá está o seu JSON

insira a descrição da imagem aqui

Adam Hey
fonte
diz que no final o texto longo foi truncado , se a sua cópia Copiar , copia os 20,6 MB inteiros?
Eduard Florinescu 28/11/19
1
@EduardFlorinescu yes, everything
Adam Hey