233

Does anyone know of a way to save the console.log output in Chrome to a file? Or how to copy the text out of the console?

Say you are running a few hours of functional tests and you've got thousands of lines of console.log output in Chrome. How do you save it or export it?

eeejay
  • 5,394
  • 8
  • 29
  • 30
  • 3
    See [Export Javascript Console log from Google Chrome](http://stackoverflow.com/questions/3462648/export-javascript-console-log-from-google-chrome) – thisgeek Nov 14 '11 at 15:09

17 Answers17

245

Good news

Chrome dev tools now allows you to save the console output to a file natively

  1. Open the console
  2. Right-click
  3. Select "save as.."

save console to file

Chrome Developer instructions here.

Community
  • 1
  • 1
adardesign
  • 33,973
  • 15
  • 62
  • 84
118

I needed to do the same thing and this is the solution I found:

  1. Enable logging from the command line using the flags:

    --enable-logging --v=1

This logs everything Chrome does internally, but it also logs all the console.log() messages as well. The log file is called chrome_debug.log and is located in the User Data Directory which can be overridden by supplying --user-data-dir=PATH (more info here).

  1. Filter the log file you get for lines with CONSOLE(\d+).

Note that console logs do not appear with --incognito.

Amir
  • 9,091
  • 5
  • 34
  • 46
Waleed Abdulla
  • 1,873
  • 1
  • 14
  • 20
  • 5
    seems it doesn't work on my mac os, there are internal logs but no Console.log... – Nico May 22 '13 at 15:12
  • 8
    This doesn't save the console.log info to the log file. In Windows 8. – rockstardev May 24 '13 at 09:00
  • 1
    I can't get this to work for console.log() messages either - under win7. I do see the file created, but it's chrome specific logging, not console related. – Justin Carroll Jun 14 '13 at 19:07
  • If I want to dump an object, it's axactly what's n the console, not the actual content of the object i.e: `[5984:2912:0209/160123:INFO:CONSOLE(55)] "[object Object],[object Object]", source: (55)` ... So I guess I have to "dump manually" the whole object? – Olivier Pons Feb 09 '14 at 15:03
  • @OlivierPons, have you tried passing the object to JSON.stringify() ? That will turn objects into strings. – Shorin Mar 03 '14 at 23:38
  • Ok I did it and everything worked as expected (`Windows 7` / `Chrome 33.0.1750.146 m` / Private mode) Thank you so much! – Olivier Pons Mar 05 '14 at 10:01
  • If you're running linux and --enable-logging isn't working as anticipated, try --enable-logging=stderr. This should dump log information to (surprise...) stderr... – dat Aug 24 '14 at 20:33
  • in my windows 7 the file `chrome_debug.log` goes to the parent folder of the one your link points to. `User data` instead of `User data\default` – Ivan Ferrer Villa Oct 23 '14 at 18:51
  • I'm getting a "Syntax Error" when I use this. Does this not work anymore? I'm putting this in the Console text field, next to the blue arrow. That the right place? Thanks – Megaroeny Oct 29 '14 at 15:24
  • 1
    @jaminroe it's parameters passed to `chrome.exe`. If you're on Windows, you can issue command `%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --enable-logging --v=1` in `cmd.exe`. – cychoi Nov 16 '14 at 01:59
  • 4
    On Mac I found the log file at ~/Library/Application Support/Google/Chrome/chrome_debug.log – vaichidrewar Feb 18 '15 at 03:45
  • 2
    This still works for me on OSX 10.10.3 `/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1` with the log saved in `~/Library/Application Support/Google/Chrome/chrome_debug.log` – mateuscb Jun 29 '15 at 14:10
  • Mac 10.12.2 (Sierra). works for me as well, pretty much like @mateuscb. The log file is full of stuff, but the user js console stuff **is** in it, in entries like `[23403:775:0116/185824:INFO:CONSOLE(1)] "coucou i am the user", source: (1)`. – JL Peyret Jan 17 '17 at 03:03
  • Is there any way to do this for chrome and not chromium? – Vipin Verma Mar 17 '17 at 04:53
  • 1
    On Windows 10 I get Uncaught SyntaxError: Unexpected identifier, adardesign's answer worked for me. – MikeJRamsey56 Mar 24 '17 at 14:59
  • check out [Sawbuck](https://www.chromium.org/for-testers/enable-logging), I haven't tried it yet the description is that is a GUI for logging chrome. – ycomp Jun 25 '17 at 06:50
  • As JohnP2 says in his answer, `--log-level=0` is a better choice than `--v=1`. – reduckted Jan 22 '18 at 22:03
  • 5
    I don't get anything other than the internal chrome logs. My `console.log()` lines are nowhere in that file. Anyone have a fix for this? – xandermonkey Dec 10 '18 at 21:02
  • What does `--v=1` means? Is there something like `--v=2` ? – Evandro Coan Jul 20 '21 at 20:45
  • June 2022, `--enable-logging --v=1` confirmed to show console logs while `--enable-logging --log-level=0` does not. – Wimateeka Jun 29 '22 at 12:47
33

I have found a great and easy way for this.

  1. In the console - right click on the console logged object

  2. Click on 'Store as global variable'

  3. See the name of the new variable - e.g. it is variableName1

  4. Type in the console: JSON.stringify(variableName1)

  5. Copy the variable string content: e.g. {"a":1,"b":2,"c":3}

enter image description here

  1. Go to some JSON online editor: e.g. https://jsoneditoronline.org/

enter image description here

Combine
  • 3,894
  • 2
  • 27
  • 30
  • 1
    Seems clunky on the surface but it works pretty well. In the later versions, at the bottom of the output there's a "Copy" button. I just press that, then have a small script that saves the clipboard as a .json file and opens in Visual Studio which is very readable. The only change is I do JSON.stringify(temp1, null, 2) to make it easier to read. The trick below to save the console works well as well. – Wade Hatler Dec 20 '18 at 01:33
  • This answer doesn't work for [`long truncated text`](https://superuser.com/questions/699922/can-i-prevent-chrome-from-truncating-strings-in-the-dev-console) – luiscla27 Mar 31 '22 at 17:44
31

There is an open-source javascript plugin that does just that, but for any browser - debugout.js

Debugout.js records and save console.logs so your application can access them. Full disclosure, I wrote it. It formats different types appropriately, can handle nested objects and arrays, and can optionally put a timestamp next to each log. You can also toggle live-logging in one place, and without having to remove all your logging statements.

inorganik
  • 24,255
  • 17
  • 90
  • 114
  • 4
    For reference, though this looks like a great tool, it will not capture output from the browser, like when image loads fail, or other built-in console output, and it requires that you rewrite your log statements using a special syntax. – Lukus Apr 13 '15 at 21:28
  • @Lukus it certainly won't capture browser output (you would need a monkey patch to do that) but there is no special syntax needed. pass the same args as you would console.log – inorganik Apr 13 '15 at 21:47
  • 1
    @Inorganik I was searching for a way for selenium tests to capture console output, but it will be used for a testing service so we don't have control of the user's websites. I think your tool is cool, but it would require a user to rewrite their existing console.log statements as bugout.log, that's what I meant by special syntax. It appears so far that there is no cross-browser way to do it a this time. – Lukus Apr 15 '15 at 05:09
  • No, it won't work for us. We need to save log of result of testing of the complex website with big amount of 3rd party scripts, which runs on different domains and we can't change most of them. – Mike Keskinov Jun 07 '17 at 21:49
10

For better log file (without the Chrome-debug nonsense) use:

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

instead of --v=1 which is just too much info.

It will still provide the errors and warnings like you would typically see in the Chrome console.

update May 18, 2020: Actually, I think this is no longer true. I couldn't find the console messages within whatever this logging level is.

JohnP2
  • 1,899
  • 19
  • 17
7

This may or may not be helpful but on Windows you can read the console log using Event Tracing for Windows

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

Our integration tests are run in .NET so I use this method to add the console log to our test output. I've made a sample console project to demonstrate here: https://github.com/jkells/chrome-trace

--enable-logging --v=1 doesn't seem to work on the latest version of Chrome.

Jared Kells
  • 6,771
  • 4
  • 38
  • 43
7

For Google Chrome Version 84.0.4147.105 and higher,

just right click and click 'Save as' and 'Save'

then, txt file will be saved

enter image description here

Edsel Ayala
  • 209
  • 4
  • 7
  • 1
    This answer doesn't work for [`long truncated text`](https://superuser.com/questions/699922/can-i-prevent-chrome-from-truncating-strings-in-the-dev-console) – luiscla27 Mar 31 '22 at 17:43
5

A lot of good answers but why not just use JSON.stringify(your_variable) ? Then take the contents via copy and paste (remove outer quotes). I posted this same answer also at: How to save the output of a console.log(object) to a file?

Community
  • 1
  • 1
user1889992
  • 355
  • 3
  • 7
  • 1
    For issues about *"**Uncaught TypeError: Converting circular structure to JSON**"*, maybe [this](https://stackoverflow.com/questions/41032565/how-to-copy-the-objects-from-chrome-console-window) could help. – KtX2SkD Oct 08 '17 at 14:24
3

There is another open-source tool which allows you to save all console.log output in a file on your server - JS LogFlush (plug!).

JS LogFlush is an integrated JavaScript logging solution which include:

  • cross-browser UI-less replacement of console.log - on client side.
  • log storage system - on server side.

Demo

hindmost
  • 7,125
  • 3
  • 27
  • 39
3

If you're running an Apache server on your localhost (don't do this on a production server), you can also post the results to a script instead of writing it to console.

So instead of console.log, you can write:

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

Then save.php can do this

<?php

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

 file_put_contents("path/$fn", $data);
supersan
  • 5,671
  • 3
  • 45
  • 64
  • 1
    I truly hope no one ever uploads this to a server in production . This is wrought with danger to the server. – Dave Mackintosh Feb 12 '17 at 19:06
  • Did you not read the first line: "If you're running an Apache server on your localhost"? – supersan Feb 13 '17 at 13:16
  • Your down vote of my post is not justified because that would be incredibly foolish for someone to run a production server on "localhost" (where the JSONP requests posts data). – supersan Feb 13 '17 at 14:15
  • I never down voted your answer, I merely pointed out the danger this script poses if ever uploaded to a server available to the public. – Dave Mackintosh Feb 13 '17 at 16:57
3
  1. Right-click directly on the logged value you want to copy
  2. In the right-click menu, select "Store as global variable"
  3. You'll see the value saved as something like "temp1" on the next line in the console
  4. In the console, type copy(temp1) and hit return (replace temp1 with the variable name from the previous step). Now the logged value is copied to your clipboard.
  5. Paste the values to wherever you want

This is especially good as an approach if you don't want to mess with changing flags/settings in Chrome and don't want to deal with JSON stringifying and parsing etc.

Update: I just found this explanation of what I suggested with images that's easier to follow https://scottwhittaker.net/chrome-devtools/2016/02/29/chrome-devtools-copy-object.html

epan
  • 372
  • 3
  • 14
2

These days it's very easy - right click any item displayed in the console log and select save as and save the whole log output to a file on your computer.

brianlmerritt
  • 2,644
  • 1
  • 34
  • 39
2

On Linux (at least) you can set CHROME_LOG_FILE in the environment to have chrome write a log of the Console activity to the named file each time it runs. The log is overwritten every time chrome starts. This way, if you have an automated session that runs chrome, you don't have a to change the way chrome is started, and the log is there after the session ends.

export CHROME_LOG_FILE=chrome.log

DrChandra
  • 181
  • 1
  • 6
1

the other solutions in this thread weren't working on my mac. Here's a logger that saves a string representation intermittently using ajax. use it with console.save instead of console.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="";
  }
};

depending on what you need, you can save that string or just console.log it and copy and paste. here's an ajax for you in case you want to save it:

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

the saveLog.php should append the data to a log file somewhere. I didn't need that part so I'm not including it here. :)

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

Symbolic
  • 693
  • 5
  • 10
0

This answer might seem specifically related, but specifically for Network Log, you can visit the following link.

The reason I've post this answer is because in my case, the console.log printed a long truncated text so I couldn't get the value from the console. I solved by getting the api response I was printing directly from the network log.

chrome://net-export/

There you may see a similar windows to this, just press the Start Logging to Disk button and that's it:

enter image description here

luiscla27
  • 4,956
  • 37
  • 49
0

Create a batch file using below command and save it as ChromeDebug.bat in your desktop.

start chrome --enable-logging --v=1

Close all other Chrome tabs and windows. Double click ChromeDebug.bat file which will open Chrome and a command prompt with Chrome icon in taskbar. All the web application logs will be stored in below path. Run the below path in Run command to open chrome log file

%LocalAppData%\Google\Chrome\User Data\chrome_debug.log

Sunil Ram
  • 21
  • 2
0

One approch is to convert results into string and convert that string data to blob and then to data url and make it downloadable using <a> tag and click()

// Convert string data to url
var results = { test1: 'result1', test2: 'result2' }
let blob = new Blob([JSON.stringify(results)], {type: 'text/plain'})
let url = URL.createObjectURL(blob)

// Create anchor tag
let downloadLink = document.createElement('a')
downloadLink.download = 'results.txt'
downloadLink.href = url

// Click to download file
downloadLink.click()
Alok
  • 7,734
  • 8
  • 55
  • 100