How to Capture Console Logs for Bug Reports (Without Being a Developer)
You've found a bug. You file the report. And then a developer replies: "Can you send over the console logs?"
If that message fills you with dread — you're not alone. For QA testers and product managers who didn't come up through a software engineering background, the browser console can feel like foreign territory. It's one of those things developers treat as obvious that nobody ever really explains.
This guide changes that. By the end, you'll know exactly what console logs are, why developers need them, how to find them yourself in Chrome, and — most importantly — how to capture them automatically without ever opening DevTools at all.
What Are Console Logs, in Plain English?
Every webpage you visit is running code — JavaScript — in your browser. As that code runs, it generates messages. Some of those messages are intentional: developers write lines like console.log("User clicked checkout") to leave breadcrumbs they can follow when debugging. Others are automatic: the browser itself fires a message whenever something goes wrong, like a failed network request or a script that crashed.
All of these messages collect in one place: the browser console.
Think of the console like a flight recorder on an airplane. While everything looks normal to the passenger (you, clicking around the page), the recorder is silently logging every system event in the background. When something goes wrong, that log is what investigators — in this case, developers — use to reconstruct exactly what happened and why.
Without console logs, a developer looking at your bug report is essentially flying blind. They can see the symptom you described, but not the cause.
Why Developers Can't Fix Bugs Without Them
Consider a common scenario: a user clicks "Submit Order" and nothing happens. No confirmation page, no error message — the button just does nothing.
From the outside, that's all you can report: "The submit button doesn't work." That description could apply to dozens of different root causes:
- A JavaScript error crashed the click handler
- An API call to the server returned a 500 error
- A required form validation check silently failed
- A third-party payment script failed to load
- An authentication token expired mid-session
The console log tells developers which of those it actually is — often pointing to the exact file and line number where it went wrong. What might take hours to reproduce and diagnose in code review takes minutes when you have the logs. That's why developers ask for them every single time.
How to Open the Console in Chrome (Step by Step)
Chrome DevTools is built into every version of Chrome. You don't need to install anything. Here's how to access it:
Method 1 — Keyboard shortcut (fastest):
- On Windows or Linux:
Ctrl + Shift + J - On macOS:
Cmd + Option + J
This opens DevTools and jumps directly to the Console tab.
Method 2 — Right-click menu:
- Right-click anywhere on the webpage
- Select Inspect
- Click the Console tab at the top of the DevTools panel
Method 3 — Chrome menu:
- Click the three-dot menu in the top-right of Chrome
- Go to More Tools → Developer Tools
- Click the Console tab
Once the console is open, you'll see a stream of messages. Some may already be there from the page loading; others will appear as you interact with the page.
How to Save Console Logs Manually
If you need to capture what's there and send it to a developer:
- Right-click anywhere inside the console output area
- Select Save as...
- Save the
.logfile and attach it to your bug report
Alternatively, you can select all the text in the console (Ctrl+A / Cmd+A while the console is focused), copy it, and paste it directly into your bug ticket.
Understanding Console Message Types
Not every console message is an emergency. Chrome color-codes and labels messages by severity so you can quickly spot what matters. Here's a breakdown:
Errors (Red)
Errors are the most serious. They mean something in the code actually broke and stopped executing. An error will almost always have a stack trace — a list of function calls that led to the failure — which tells a developer precisely where things went wrong.
Warnings (Yellow/Orange)
Warnings don't crash anything, but they signal that something is being used incorrectly or is deprecated (an older way of doing something that will eventually stop working). They're worth noting, especially if they relate to the feature you're testing.
Info and Log (Blue/White)
These are informational messages developers deliberately added. They might say things like "Cart updated" or "API response received". These create a timeline of events and are very useful for reconstructing what the application was doing before a bug occurred.
Common Console Errors Explained in Plain English
Here are the errors QA testers encounter most often, and what they actually mean:
Uncaught TypeError: Cannot read properties of undefined
Translation: The code tried to use a piece of data that didn't exist yet. Imagine asking for someone's middle name when the database record doesn't have a middle name field — the code expected it to be there, it wasn't, and it crashed.
404 (Not Found) on a network request
Translation: The page tried to load a resource — an image, a script file, an API endpoint — and got a "doesn't exist" response from the server. This often causes features to silently fail.
500 (Internal Server Error) on an API call
Translation: The server received the request just fine, but something broke on the server's side while processing it. This is almost never a front-end problem — a backend developer needs to look at server logs.
CORS error (Cross-Origin Resource Sharing)
Translation: The browser blocked a request because the website was trying to talk to a server it's not explicitly permitted to contact. This is a security policy that sometimes gets misconfigured during deployments or environment changes.
Uncaught ReferenceError: [variable] is not defined
Translation: The code tried to use a variable or function that was never created. This often happens when a script fails to load, or when code runs in the wrong order.
net::ERR_FAILED or net::ERR_CONNECTION_REFUSED
Translation: The browser couldn't connect to a server at all — the server may be down, unreachable, or the URL is wrong. Common in staging environments where services aren't always running.
Whenever you see these errors in the console while reproducing a bug, copy the full error message — including the URL or filename reference at the end — and include it verbatim in your bug report.
The Problem with Doing This Manually
Now that you know how to find console logs, here's the honest reality of doing it manually:
It only captures what's visible in the console right now. If you navigated to a different page, the console clears. If you opened DevTools after the bug happened, the relevant logs may already be gone. You have to think ahead and have DevTools open before you start testing — every single session.
It also interrupts your workflow. You're context-switching between testing the product and managing a developer panel. For teams running structured QA cycles across multiple features, this friction adds up fast.
And here's the biggest catch: console logs alone are often not enough. Developers typically also need the network requests (to see what API calls were made and what the server responded with), the sequence of user actions leading up to the bug, and environment details like browser version and screen resolution. Gathering all of that manually is a significant effort.
The Automated Approach: Capture Everything Without Opening DevTools
The modern answer to this problem is a browser extension that captures all of this technical context automatically, in the background, every time you file a bug report.
Crosscheck is built specifically for this use case. It runs silently while you test, and when you capture a screenshot, record a video, or trigger an instant replay, it automatically attaches:
- Console logs — every
error,warning,info, andlogmessage, with timestamps, so developers see the exact sequence of events - Network requests — full details including URL, HTTP method, status code, response timing, and headers
- User action timeline — a chronological record of every click, scroll, and navigation that led to the bug
- Performance metrics — page load times and rendering data that can surface performance-related bugs
All of this is zero setup. You don't configure anything, you don't open DevTools, and you don't have to remember to have the console open before you start testing. Crosscheck captures it in the background constantly, and attaches it to your report the moment you create one.
One important detail worth calling out: Crosscheck automatically filters sensitive headers like Authorization and Cookie from network request captures. This means you can share bug reports with teammates, external developers, or contractors without worrying about leaking session tokens or authentication credentials.
How Other Tools Compare
Several tools in this space take a similar approach:
- Marker.io attaches JavaScript errors to bug reports submitted via their widget
- Jam captures console logs and network requests alongside a screen recording when you file a report
- BetterBugs offers a Chrome extension with one-click bug capture including DevTools data
The difference with Crosscheck is the depth of context captured and the fact that it works seamlessly within an existing QA workflow — screenshots, recordings, and replays all come pre-loaded with developer-ready data.
What to Include in a Bug Report with Console Logs
Whether you're capturing logs manually or using an automated tool, a strong bug report pairs the console output with context. Here's a checklist:
- Steps to reproduce — exactly what you clicked, in what order, starting from which page
- Expected behavior — what should have happened
- Actual behavior — what actually happened (including any error messages visible on screen)
- Console errors — the full text of any red error messages, including the file/line reference
- Network failures — any 4xx or 5xx responses visible in the Network tab (or captured automatically)
- Environment — browser name and version, operating system, screen resolution
- Timestamp — when the bug occurred, especially relevant in log-heavy environments
With all of this, a developer can typically identify the root cause of a bug without needing to ask a single follow-up question.
Wrapping Up
Console logs aren't mysterious — they're just a running record of what the browser's JavaScript engine was doing and thinking. Once you know what you're looking at, they're genuinely useful even without a developer background.
The manual method through Chrome DevTools works, and knowing how to do it is a real skill worth having. But for day-to-day QA work, automated capture is faster, more complete, and removes the risk of missing logs because DevTools wasn't open at the right moment.
The next time a developer asks for console logs, you'll have two options: open DevTools and grab them yourself, or hand them a Crosscheck report that already has everything they need.
Either way, you won't be stumped by the question again.
Want to see how Crosscheck automatically captures console logs, network requests, and user actions in your bug reports? Try it free on the Chrome Web Store.



