Guarde el archivo console.log en Chrome en un archivo

Respuestas:

98

Necesitaba hacer lo mismo y esta es la solución que encontré:

  1. Habilite el registro desde la línea de comando usando las banderas:

    --enable-logging --v=1

    Esto registra todo lo que Chrome hace internamente, pero también registra todos los console.log()mensajes. Se llama al archivo de registro chrome_debug.logy se encuentra en User Data Directory.

  2. Filtra el archivo de registro que obtienes para las líneas CONSOLE(\d+).

Tenga en cuenta que los registros de la consola no aparecen con --incognito.

Waleed Abdulla
fuente
3
parece que no funciona en mis mac os, hay registros internos pero no Console.log ...
Nico
77
Esto no guarda la información de console.log en el archivo de registro. En Windows 8.
coderama
44
En Mac encontré el archivo de registro en ~ / Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar
2
Esto todavía funciona para mí en OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1con el registro guardado en~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb
3
No obtengo nada más que los registros internos de Chrome. Mis console.log()líneas no están en ninguna parte de ese archivo. ¿Alguien tiene una solución para esto?
xandermonkey
187

Buenas noticias

Las herramientas de desarrollo de Chrome ahora le permiten guardar la salida de la consola en un archivo de forma nativa

  1. Abre la consola
  2. Botón derecho del ratón
  3. Seleccione "guardar como ..."

guardar consola en archivo

Instrucciones para desarrolladores de Chrome aquí .

adardesign
fuente
3
¿Se puede hacer esto usando un atajo de teclado o ejecutando un comando en la consola?
Sarthak Singhal
1
Aquí hay una lista de todos los atajos de devTools developer.chrome.com/devtools/docs/shortcuts
adardesign
11
Esto no parece copiar el seguimiento de la pila
Michael
2
¿Puedes abrir ese archivo en la consola nuevamente? Si es así, ¿cómo haces eso?
Mahathi Vempati
77
Tenga en cuenta que esto no expandirá los objetos, seguirá imprimiendo objetos grandes en su forma truncada, por ejemplo {a: 1, b: 2, c: 3, ...}.
Galen Long
29

Hay un complemento de JavaScript de código abierto que hace exactamente eso, pero para cualquier navegador: debugout.js

Debugout.js registra y guarda console.logs para que su aplicación pueda acceder a ellos. Revelación completa, lo escribí. Formatea diferentes tipos de manera apropiada, puede manejar objetos anidados y matrices, y opcionalmente puede colocar una marca de tiempo al lado de cada registro. También puede alternar el registro en vivo en un lugar y sin tener que eliminar todas las declaraciones de registro.

inorganik
fuente
44
Como referencia, aunque parece una gran herramienta, no capturará la salida del navegador, como cuando fallan las cargas de imágenes u otra salida de consola incorporada, y requiere que reescriba sus declaraciones de registro utilizando una sintaxis especial.
Lukus
@Lukus ciertamente no capturará la salida del navegador (necesitaría un parche de mono para hacerlo) pero no se necesita una sintaxis especial. pase los mismos argumentos que lo haría con console.log
inorganik
1
@Inorganik Estaba buscando una forma de pruebas de selenio para capturar la salida de la consola, pero se utilizará para un servicio de prueba para que no tengamos control de los sitios web del usuario. Creo que su herramienta es genial, pero requeriría que un usuario reescriba sus declaraciones de console.log existentes como bugout.log, eso es lo que quiero decir con sintaxis especial. Parece que hasta ahora no hay forma de hacerlo entre navegadores.
Lukus
No, no funcionará para nosotros. Necesitamos guardar el registro del resultado de las pruebas del sitio web complejo con una gran cantidad de scripts de terceros, que se ejecutan en diferentes dominios y no podemos cambiar la mayoría de ellos.
Mike Keskinov
23

He encontrado una manera excelente y fácil para esto.

  1. En la consola, haga clic derecho en el objeto registrado de la consola

  2. Haga clic en 'Almacenar como variable global'

  3. Vea el nombre de la nueva variable, por ejemplo, variableName1

  4. Escriba en la consola: JSON.stringify (variableName1)

  5. Copie el contenido de la cadena variable: por ejemplo, {"a": 1, "b": 2, "c": 3}

ingrese la descripción de la imagen aquí

  1. Vaya a algún editor en línea de JSON: por ejemplo, https://jsoneditoronline.org/

ingrese la descripción de la imagen aquí

Combinar
fuente
1
Parece torpe en la superficie pero funciona bastante bien. En las versiones posteriores, en la parte inferior de la salida hay un botón "Copiar". Solo presiono eso, luego tengo un pequeño script que guarda el portapapeles como un archivo .json y se abre en Visual Studio, que es muy legible. El único cambio es que hago JSON.stringify (temp1, null, 2) para que sea más fácil de leer. El truco a continuación para guardar la consola también funciona bien.
Wade Hatler
8

Para un mejor archivo de registro (sin las tonterías de depuración de Chrome) use:

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

en lugar de lo --v=1cual es demasiada información.

Seguirá proporcionando los errores y advertencias que normalmente vería en la consola de Chrome.

actualización 18 de mayo de 2020: en realidad, creo que esto ya no es cierto. No pude encontrar los mensajes de la consola dentro de este nivel de registro.

JohnP2
fuente
7

Esto puede o no ser útil, pero en Windows puede leer el registro de la consola mediante el seguimiento de eventos para Windows

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

Nuestras pruebas de integración se ejecutan en .NET, así que utilizo este método para agregar el registro de la consola a nuestra salida de prueba. Hice un proyecto de consola de muestra para demostrar aquí: https://github.com/jkells/chrome-trace

--enable-logging --v = 1 no parece funcionar en la última versión de Chrome.

Jared Kells
fuente
3

Muchas buenas respuestas, pero ¿por qué no usar JSON.stringify (your_variable)? Luego tome el contenido mediante copiar y pegar (eliminar comillas externas). Publiqué esta misma respuesta también en: ¿Cómo guardar la salida de un console.log (objeto) en un archivo?

usuario1889992
fuente
1
Para problemas sobre " Error de tipo no capturado: convertir estructura circular a JSON " , quizás esto podría ayudar.
KtX2SkD
2

Hay otra herramienta de código abierto que le permite guardar todos los console.logresultados en un archivo en su servidor: JS LogFlush (plug!).

JS LogFlush es una solución de registro de JavaScript integrada que incluye:

  • reemplazo de la interfaz de usuario sin navegador cruzado de console.log - en el lado del cliente.
  • sistema de almacenamiento de registros: en el lado del servidor.

Manifestación

postrero
fuente
2

Si está ejecutando un servidor Apache en su host local (no haga esto en un servidor de producción), también puede publicar los resultados en un script en lugar de escribirlo en la consola.

Entonces, en lugar de console.log, puedes escribir:

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

Entonces save.phppuede hacer esto

<?php

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

 file_put_contents("path/$fn", $data);
supersan
fuente
1
Realmente espero que nadie suba esto a un servidor en producción 🙁. Esto está forjado con peligro para el servidor.
Dave Mackintosh
¿No leyó la primera línea: "Si está ejecutando un servidor Apache en su host local"?
supersan
Su voto negativo de mi publicación no está justificado porque sería increíblemente tonto que alguien ejecute un servidor de producción en "localhost" (donde JSONP solicita datos de publicaciones).
supersan
Nunca rechacé su respuesta, simplemente señalé el peligro que representa este script si alguna vez se carga en un servidor disponible para el público.
Dave Mackintosh
1

En Linux (al menos) puede configurar CHROME_LOG_FILE en el entorno para que Chrome escriba un registro de la actividad de la Consola en el archivo nombrado cada vez que se ejecute. El registro se sobrescribe cada vez que se inicia Chrome. De esta manera, si tiene una sesión automatizada que ejecuta Chrome, no tiene que cambiar la forma en que se inicia Chrome, y el registro está allí después de que finaliza la sesión.

exportar CHROME_LOG_FILE = chrome.log

DrChandra
fuente
0

En estos días es muy fácil: haga clic con el botón derecho en cualquier elemento que se muestre en el registro de la consola y seleccione guardar como y guarde toda la salida del registro en un archivo en su computadora.

brianlmerritt
fuente
0

Las otras soluciones en este hilo no funcionaban en mi Mac. Aquí hay un registrador que guarda una representación de cadena intermitentemente usando ajax. usarlo en console.savelugar 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="";
  }
};

dependiendo de lo que necesite, puede guardar esa cadena o simplemente console.logy copiar y pegar. Aquí hay un ajax para usted en caso de que quiera guardarlo:

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);
}

la saveLog.phpdebe anexar los datos a un archivo de registro en alguna parte. No necesitaba esa parte, así que no la incluiré aquí. :)

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

jaya
fuente