How it works
Most log viewers load the entire file into memory before showing anything. That caps their practical
file size at whatever RAM the browser will hand over. Big Log Explorer takes a different path. A Web
Worker reads the file in 1 MB chunks via the browser's File API.1
Workers run scripts in background threads without interfering with the user interface.2
The parsed records are written to IndexedDB one batch at a time.3 The browser tab keeps responding
while indexing runs in the background.
Once indexing completes, the Worker is terminated and the main thread opens a read-only connection to the same IndexedDB database. The log viewer uses virtual scrolling: only the rows currently on screen plus a small overscan buffer are in the DOM at any time. A spacer div sized to the total line count gives the scrollbar correct proportions across millions of lines.
Getting a stack's logs into the drop zone
Most real 500 MB log files come from a platform, not a laptop: a container orchestrator, a
container runtime, a service manager's journal, or a cloud log service. Every one of these
offers a way to write its output to a local file, and a local file is all the drop zone asks
for. Once the file lands, the format follows the emitter. Structured JSON loggers drop one
object per line into the JSON Lines branch, plain application text with a leading timestamp
into the ISO 8601 branch, and ingress or web-server access logs into the Common
Log Format branch. Nothing about the stack changes that routing.
Capture one service or one container at a time rather than a whole cluster's interleaved firehose. Pattern clustering reads best when a file comes from a single emitter, because interleaved producers weave their templates together and blur the counts. The platform's own log-retrieval path is the capture mechanism: Kubernetes documents a built-in way to fetch a pod's logs,4 and Docker documents the same for any container it runs,5 so getting logs onto disk needs nothing beyond the platform you already operate. Save the retrieved output as a file, drop it here, and the pipeline takes over from that point.
Opening Log Files Too Large for an Editor
Streaming the file in 1 MB chunks and indexing each line are what let the explorer open files that defeat a text editor. The guide below explains why editors and repeated grep runs struggle with multi-gigabyte logs, what you can do with a large file once it opens, and how to handle a log so big that even the browser's IndexedDB quota cannot hold it.
Big log files break the tools you reach for first. Open a two-gigabyte log in a text editor and it either refuses or freezes while it tries to load the whole thing into memory.1 Reach for grep and it works, but scanning a multi-gigabyte file line by line takes real time, and every new query pays the cost again.2 Tail and less handle streaming but give you no way to filter by level, chart a spike, or see which message repeats.
Big Log Explorer takes a different approach that fits the browser you already have open. It streams the file in 1 MB chunks through a Web Worker, indexes each line into IndexedDB, and shows only the rows currently on screen. Consequently, the file size that matters is your disk and browser quota, not your RAM, and a log that crashes an editor opens and stays responsive.
Why editors and grep struggle
The trouble with large logs comes down to how a tool holds the data. A text editor loads the entire file into memory so it can render, search, and scroll it, which means a file larger than the memory the browser or app will hand over simply cannot open. That is the wall you hit around a few hundred megabytes in most editors.
Loading everything versus loading what you see
Big Log Explorer never holds the whole file in memory. A Web Worker reads the file in 1 MB chunks, parses each line, and writes the parsed records to IndexedDB, a database that lives on disk rather than in the page heap.3 The viewer then uses virtual scrolling, keeping only the rows currently visible plus a small overscan buffer in the DOM, with a spacer sized to the total line count so the scrollbar stays proportional.4 Consequently, memory use stays roughly flat whether the file is fifty megabytes or five hundred. Grep, by contrast, does not exhaust memory but re-reads the file for every query2, so an interactive session of narrowing and re-narrowing pays the full scan cost each time. The indexed approach pays that cost once, up front, then answers every filter instantly.
Virtual scrolling is the other half of why it stays responsive. The viewer draws only the rows near the current scroll position, so the DOM holds a few hundred elements no matter how many millions of lines the file contains. That keeps the page fluid when you scroll, and it is why searching and filtering feel instant rather than fighting a giant rendered table. The index answers the query; the virtual scroll answers the display.
What you can do once it opens
Opening the file is only the start, and the point is what becomes possible afterward. Once the log is indexed, every interaction runs against the database rather than the raw text, so filtering feels immediate regardless of size. You can switch the level pills to isolate errors, type a term into the search box to match a request ID or a service name, and drag across the time chart to focus on the minutes around a spike. Each of these composes with the others, so an error pill plus a search term plus a time window narrows millions of lines to a handful.
Furthermore, the Patterns panel groups the file by message template, revealing which line dominates without any scrolling. Because all of this happens locally, there is no query latency and no round trip to a server. The experience is closer to a database console than to a text viewer, which is exactly what a large log needs to be useful rather than merely openable.
From open to answer in a few clicks
The indexed model means exploration is cheap, so you try things you would never bother with on a raw file. Jump to the ERROR pill, then refine with a service name, then drag the chart to a spike, each step taking a fraction of a second. Because nothing is re-scanned and nothing leaves the browser, the cost of poking at the data is effectively zero, which is what turns a daunting multi-gigabyte file into something you can actually interrogate.
Handling logs too big even for IndexedDB
There is still an upper bound, and it is worth understanding before you drop a truly enormous file. The limit is your browser IndexedDB quota, which on desktop browsers is typically several gigabytes but is not unlimited.5 A single log that exceeds that quota may fail to index fully, which is a different failure from an editor running out of RAM.
Splitting and streaming
When a file is genuinely too large for one session, the practical move is to narrow it before loading. Command-line tools split a file by line count or size, so you can carve a multi-gigabyte log into pieces that each fit comfortably. You can also pre-filter with grep to extract only the time range or service you care about, then open the smaller result in the tool for interactive analysis. Consequently, the workflow that scales best is coarse filtering on the command line followed by fine, iterative exploration in the browser. Furthermore, because the tool clears its IndexedDB database on tab reload, each piece starts from a clean slate, so you can work through several chunks for opening large logs in the browser without leftovers from a previous one interfering.
Reach for this when a log is too big to open comfortably in an editor and too tedious to explore with repeated grep passes. It suits post-incident analysis of a large exported log, auditing an access log that runs to millions of lines, or reading a verbose debug capture. Drop the file straight into Big Log Explorer and watch the indexing progress bar, since that single pass is what makes every filter after it instant, and the interactive filtering pays off quickly over a scrolling text view as long as the file fits your browser quota.
A 2 GB production log that will not open in your editor
vim app.log # freezes, then runs out of memory
Drop app.log onto Big Log Explorer; it streams in 1 MB chunks and stays responsive
Memory use stays roughly flat because only the visible rows are held in the DOM.
Iterating on a search that grep re-scans each time
grep ERROR huge.log | grep user-service | grep timeout
Set the ERROR pill, search user-service, then add timeout, all against the indexed data
Each filter runs instantly because the file is indexed once rather than re-scanned per query.
A file larger than your browser quota
Drop a 12 GB log; indexing may not complete
split -b 1G huge.log part_ then open one part at a time
Coarse split on the command line, fine exploration in the browser.
- 1.
microsoft/vscode, "VS Code crashes when opening large files," github.com, accessed July 2026. https://github.com/microsoft/vscode/issues/310440
- 2.
Stack Overflow, "Performance issue with parsing large log files (~5gb) using awk, grep, sed," stackoverflow.com, 2011. https://stackoverflow.com/questions/7197500/performance-issue-with-parsing-large-log-files-5gb-using-awk-grep-sed
- 3.
MDN, "Web Workers API," developer.mozilla.org, accessed July 2026. https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
- 4.
CSS-Tricks, "Rendering Lists Using React Virtualized," css-tricks.com, accessed July 2026. https://css-tricks.com/rendering-lists-using-react-virtualized/
- 5.
MDN, "Storage quotas and eviction criteria," developer.mozilla.org, accessed July 2026. https://developer.mozilla.org/en-US/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria
Big Log Explorer is designed for files up to 500 MB and has been tested beyond that. It streams the file in 1 MB chunks and stores parsed records in IndexedDB, so the whole file is never held in memory at once. The practical ceiling is your browser IndexedDB quota, typically several gigabytes on desktop. Beyond that, split the file first.
A text editor loads the entire file into memory before it can display it, so a file larger than available RAM fails to open. Big Log Explorer keeps the data on disk in IndexedDB and renders only the rows currently on screen through virtual scrolling. Memory use stays roughly flat regardless of file size, which is why a log that crashes an editor still opens here.
For a single search, grep is fine. For an interactive session of narrowing and re-narrowing, CapyToolkit's Big Log Explorer is faster, because it indexes the file once and then answers every filter, level pill, and time selection against that index instantly. Grep re-reads the file for each query. The tradeoff is the one-time indexing pass when you first open the file.
No. The file is read entirely in your browser through the File API, parsed in a Web Worker, and stored in a session-scoped IndexedDB database that is deleted when you close or reload the tab. No network request carries the file contents. This matters for large production logs, which often contain hostnames, tokens, and user data you do not want to send off your machine.
Narrow it before loading. Use a command-line tool to split the log into pieces by size or line count, or pre-filter with grep to extract only the time range or service you need, then open the smaller result in the tool. Coarse filtering on the command line followed by interactive exploration in the browser handles logs of essentially any size.
Searching Log Files Without Re-Scanning Them
Because the file is indexed once, every search after that runs against the stored records instead of the raw text. The guide below shows how literal text search stays instant as you refine it, how to layer a search with the level pills and a time-chart selection, and how the Patterns panel helps when you cannot name the exact message you are looking for.
You know the request ID and need its lines. Searching a log is the most common thing anyone does with one, yet on a large file the obvious tools make it slow or clumsy. Grep re-scans the whole file each time you refine the query1, an editor chokes before you can even open the search box, and a log service costs money and sends your data away. Big Log Explorer indexes the file once, then searches the indexed records in your browser2, so matching stays instant no matter how many times you refine. Type a term into the search box and the viewer filters to lines containing it, live. Because the search combines with the level pills, the time chart, and the Patterns panel, a plain text match becomes the starting point for real narrowing rather than the end of it.
Text search that stays instant
The defining feature of searching in Big Log Explorer is that speed does not degrade as you refine. When the file is indexed, a search runs against the records already in IndexedDB rather than re-reading the file2, so each refinement returns immediately. That changes how you work. Instead of composing one perfect grep and waiting, you type a rough term, watch the results shrink, then add or change words to home in. For a several-hundred-megabyte log, the difference between an instant filter and a multi-second scan per query is the difference between exploring and waiting.
Furthermore, the viewer keeps virtual scrolling active over the filtered results3, so even a search that still matches hundreds of thousands of lines scrolls smoothly. Because nothing leaves the browser, there is no network latency between your query and the answer either. Search here feels interactive in a way that a scan-per-query tool cannot match on a large file.
Why indexing beats a live scan
The instant feel comes from doing the expensive work once, up front, rather than per query. When you open the file, a Web Worker reads it in 1 MB chunks and writes each parsed line to IndexedDB4, so by the time you search, the records are already structured and addressable. A grep pass, by contrast, starts from raw bytes every time1, which is why each refinement costs a full scan. The chunked read also leans on the platform streaming model rather than buffering the whole file, since a readable stream lets consumers take data incrementally instead of holding all of it in memory5. Paying the indexing cost once is what lets every later search return in a blink, and it is the same trick that keeps filtering and the time chart fast.
Layering search with level and time
A raw text search is powerful, but its real strength appears when you stack it with the other filters. On its own, a search for a service name might still return tens of thousands of lines across an entire day. The moment you add a severity or a time constraint, that set collapses to something readable.
The filters compose
Each control in Big Log Explorer narrows the same indexed set rather than starting a new query. Select the ERROR pill and your search now matches only error-class lines mentioning the term. Drag the time chart across a spike and it further restricts to that window. The Patterns panel updates alongside, showing which templates dominate the filtered view. Consequently, a workflow emerges: search to find the relevant subject, add a level to focus on failures, add a time window to bound the incident, then read the few dozen lines that remain. Furthermore, because every step is reversible with a click, you can widen one constraint without losing the others, which makes exploring a log feel like adjusting dials rather than rewriting a command each time.
The composition also survives mistakes gracefully. If you add a time window that is too tight and the results vanish, widening it one drag brings everything back, because each filter is layered on the same set rather than baked into a fresh query. That safety is why people experiment with filters here when they would never risk a fragile piped command on a live log, where one typo can silently drop the lines you needed.
Finding what you cannot name exactly
Sometimes you do not know the exact string to search for, only that something is wrong. A plain text search assumes you can name the needle, which is not always true at the start of an investigation. This is where the Patterns panel complements search rather than competing with it.
Let clustering surface the term
The Patterns panel groups the file by normalized message template, so the messages that repeat most rise to the top regardless of whether you knew to look for them. Reading the top templates often reveals the exact phrase worth searching, whether a connection reset, a specific exception class, or a recurring warning you had not considered6. From there you click Filter on the template to pull those lines into the viewer, or copy a distinctive phrase into the search box to match variants the template collapsed.
Consequently, clustering and search form a loop, because the panel tells you what to search for and search then isolates the specific lines. Try both moves with instant log search in the browser on your own file, searching for what you already suspect, then checking the Patterns panel for what you might have missed. Because both run against the same local index, moving between them costs nothing, and you converge on the relevant lines even when you started with only a vague symptom.
Use search whenever you need specific lines out of a large log: tracing one request ID across services, pulling every mention of a user or host, or confirming whether an error string appears at all. It shines when you expect to refine the query several times, since each refinement is instant. Pair it with the level pills and time chart to bound the results quickly.
Tracing one request across a large log
grep 7f3a9c2e big.log # scans the whole file
Type 7f3a9c2e in the search box; the viewer filters live to matching lines
Refining the term costs nothing because the file is already indexed.
You are not sure what to search for
No obvious string to grep for yet
Open the Patterns panel, read the top templates, then search the phrase that stands out
Clustering surfaces the term; search isolates the lines.
Too many matches for a common word
Searching timeout returns 80,000 lines
Add the ERROR pill and a time-chart window to cut it to a readable set
Filters compose against the same indexed data.
- 1.
dmtrKovalenko/fff, "fff — Fast File Finder," github.com, accessed July 2026. https://github.com/dmtrKovalenko/fff
- 2.
MDN, "IndexedDB API," developer.mozilla.org, accessed July 2026. https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
- 3.
CSS-Tricks, "Rendering Lists Using React Virtualized," css-tricks.com, accessed July 2026. https://css-tricks.com/rendering-lists-using-react-virtualized/
- 4.
MDN, "Using Web Workers," developer.mozilla.org, accessed July 2026. https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers
- 5.
WHATWG, "Streams Standard," whatwg.org, accessed July 2026. https://streams.spec.whatwg.org/
- 6.
logparser, "Drain," logparser.readthedocs.io, accessed July 2026. https://logparser.readthedocs.io/en/latest/tools/Drain.html
No. Big Log Explorer indexes the file into IndexedDB when you open it, and the search runs against those indexed records. Refining or changing the query filters the existing index rather than re-reading the file, so each change returns immediately. That is what makes iterative searching practical on a several-hundred-megabyte log, where a scan-per-query tool would pause on every edit.
Yes, and that is the intended workflow. The search box, the level pills, and the time-chart selection all narrow the same indexed set, so they compose. CapyToolkit's Big Log Explorer lets you search for a service, add the ERROR pill to see only its failures, then drag the time chart to bound the window. Each control further restricts the results, and removing one restores the rest.
The search box matches lines that contain your text, which covers the large majority of log searches. When you need pattern-based grouping rather than a literal match, the Patterns panel already normalizes variable parts like IDs and IPs into placeholders, so lines that differ only by those values cluster together. Between literal search and template clustering, most investigative needs are covered without writing a regex.
Start with the Patterns panel. It groups the log by message template and ranks templates by count, so the dominant messages surface even when you cannot name them. Reading the top templates usually reveals the exact phrase worth searching. Click Filter on a template to pull its lines into the viewer, or copy a distinctive phrase into the search box to explore further.
Entirely locally. The file is read in your browser, parsed in a Web Worker, and stored in a session-scoped IndexedDB database. Every search runs against that local index, and no query or file content is sent anywhere. The database is deleted when you close or reload the tab, so a searched log leaves nothing behind and never travels off your machine.
Supported log formats
Format detection happens per line rather than per file, so a single log can freely mix timestamps, levels, and payloads from different emitters without confusing the parser. This lets you drop in a real production export that interleaves application logs, access logs, and the occasional raw exception stack trace. Three structured formats are recognised automatically; any line that matches none of them is kept as raw text so nothing disappears from the viewer.
JSON Lines(JSONL).6 Any line starting with{is parsed as JSON. Timestamp fields (timestamp,time,ts,@timestamp,datetime) and severity fields (level,severity,lvl) are extracted automatically. This covers Bunyan, Winston, Pino, Logstash, and most structured logging formats.ISO 8601log lines. Lines starting with a date-time string inISO 8601format are recognised.7 They may be optionally followed by a bracketed level like[ERROR]. This covers the default output of most application loggers including Log4j, syslog with ISO timestamps, and cloud provider log exports.Common Log Format.8 The format used by Nginx access logs and many web-server access logs.9HTTPstatus codes map to severity:5xxis error,4xxis warn, everything else is info.
How each format is recognised
The reader tries the formats in a fixed order for every line, checking the cheapest rule first to
keep overhead negligible even across tens of millions of lines. JSON Lines wins if a line opens with
a curly brace and parses as valid JSON; ISO 8601 wins if the leading characters encode a date and
time; Common Log Format wins if the line matches the request-and-status shape used by web servers.
A fourth rule recognises lines whose leading characters encode a day-named-month-year timestamp such as
15-Mar-2026 or 15/Mar/2026, parsing the timestamp and treating the line as
info-level. Each branch pulls out the same three fields, a timestamp, a severity level, and a
message, so the viewer can sort, filter, and chart lines regardless of which producer emitted
them; lines that win none of the rules are kept as raw text and still appear in the viewer and
the pattern panel.
Choosing between overlapping formats is handled by specificity rather than by file extension, so a
log that begins as plain Common Log Format but suddenly switches to JSONL mid-stream is indexed
correctly without any manual configuration. The formats list is intentionally small: it covers the
majority of operational logs while keeping the per-line detection fast enough to sustain line rates
of hundreds of thousands per second inside a Worker thread.
Formats the rules cover beyond the big three
Two formats the named list never mentions still parse cleanly. The combined log format extends
Common Log Format with the referrer and user-agent fields after the status
code,8 and because the CLF rule matches through the status field, those
trailing fields never break the match: a combined line charts and level-maps exactly like a plain
one. Syslog lines in the modern RFC 5424 shape begin with an ISO timestamp, and the ISO rule
recognises them for exactly that reason, since it keys on the leading date-time rather than on the
format's name. The big three were always a simplification of what the rules accept.
The honest boundary is classic syslog. Lines that lead with a month-first timestamp and no year,
the RFC 3164 shape, match none of the rules and land as raw text: fully visible in the viewer under
the ALL pill, counted in the pattern panel, and absent from the time chart because no
timestamp parsed. Lines whose severity parses as other likewise appear under
ALL only, because the pill row carries no OTHER entry. Neither behavior
loses data; both only narrow where the chart and the pills can take you. A raw-text file still
opens, indexes, and clusters normally.
Pattern clustering
The Patterns panel groups log lines by template so you can see, at a glance, which messages dominate
a noisy file. Each message is normalised by replacing variable parts, including URLs, IP
addresses, UUIDs, hex strings, file paths, floats, and integers, with placeholders such as <url> and <n>; the curly braces in JSON keys are replaced by a
single placeholder too, so two otherwise identical lines with different IDs collapse into one cluster.
Lines that produce the same normalised string are counted together.
How the patterns filter the viewer
The top 50 patterns by count are shown in the panel, each row carrying the template and the number of lines it matched. The Filter button on a row narrows the log viewer to lines matching that template, and that filter combines with any active text search or level filter already in place, so you can isolate one recurring error across a five-hundred-megabyte file without downloading anything. The cluster counts themselves are computed once, over the whole file, during indexing; they stay whole-file counts while the viewer narrows, and the Worker that built them is terminated as soon as indexing completes.
Privacy
Log files regularly contain hostnames, user IDs, request paths, and authentication tokens, which is why the entire pipeline of file reading, line parsing, IndexedDB indexing, and filtering is designed to run inside your browser tab. No data reaches any server. A dedicated Web Worker reads and parses the file on a background thread without interfering with the user interface, so the heavy lifting never blocks the tab you are reading.2
Where the data is stored and when it disappears
The parsed records are written to an IndexedDB object store that lives only for the lifetime of the page, scoped to the current tab's origin. The IndexedDB database is deleted when you close or reload the tab, so nothing written during one session is carried into the next. The resulting database is local to your machine and is never uploaded, synchronised, or shared across origins, because IndexedDB follows a same-origin policy and the tool performs no network requests with file contents at any point.3
Time-chart navigation for incident triage
During an incident, narrowing down when a problem started is often the first step toward finding what caused it. The time-series chart at the top of the log viewer plots line counts per time bucket across the full span of the log file. A spike in error-level lines at a specific time stands out visually even before you read a single log entry. Dragging across the chart to select a time window immediately filters the log viewer to lines from that period, letting you read a few hundred lines in context rather than scrolling through millions. Clicking outside the highlighted region restores the full log.
Combining the time filter with a level filter and a text search lets you isolate a specific error class within a short window with a few clicks. For example: select the five-minute window around a spike, switch the level pill to ERROR, and search for a service name. The viewer then shows only error-level lines mentioning that service in those five minutes. This layered filtering needs no query language. The pattern list stays a whole-file view while you work, so the template that dominates the selected window is found by reading the narrowed viewer and refining the search, not by watching pattern counts move. Because the entire log is stored locally in IndexedDB, all filtering happens on your machine regardless of file size, which keeps iterative narrowing practical for logs several hundred megabytes long.
What search can and cannot do
The search box matches a plain, case-insensitive substring against each raw line after a
half-second debounce, and the match combines with the level pill, the active pattern, and the
selected time window. Each added filter narrows the same line set rather than starting the search
over. Searching for an error string with the ERROR pill pressed is the fastest route
from a noisy file to one failure class, because the substring names the failure and the pill
removes everything the failure is not. Nothing you type needs escaping or quoting, which keeps the
tool honest about being a viewer first.
Every character you type is literal. There are no regular expressions, no wildcards, and no
boolean operators, so a search for error.*timeout looks for that exact run of
characters rather than a pattern. The narrowed result lives in the viewer and nowhere else: there
is no export or download of the filtered lines, no way to save the selection to disk from this
tool. When you need the narrowed set somewhere else, the reproducible artifact is the source file
plus your filter choices, and re-creating the view is a few clicks. The viewer is the destination
by design.
Narrowed the Incident Down Checklist
- Spike located on the time-series chart Drag-select the window around the spike before doing anything else — everything else filters within that selection.
- Level pill switched to ERROR (or WARN) Combines with the time window so you only read lines at the severity that actually matters for the incident.
- Text search narrowed to a service or component name Layering search on top of the time and level filters isolates one failing component out of a noisy file.
- Pattern panel checked for the dominant template The top pattern by count in the filtered window is usually the root error worth reading in full.
Drop your own log file above and work through this checklist to narrow down an incident.
Finding Every Error in a Log File
An incident usually starts with one question for the log: where are the errors? The guide below explains how the explorer folds fatal, critical and other error-class levels, along with 5xx status codes, into one ERROR pill and 4xx statuses into WARN, then how the time chart shows when the failures started and how the Patterns panel shows which error dominates.
Finding the errors is the whole point. Something broke, and the log holds the evidence, but the failures are buried under thousands of routine info lines that mean nothing to your current problem. The naive approach, scrolling or grepping for the word error, misses the fatals, the crits, and the 500s that never spell it out.12
Big Log Explorer solves this by normalizing every severity it reads into an ERROR pill that means all error-class messages at once. One click isolates them across the entire file, whether they arrived as a JSON level field, a bracketed ISO level, or an HTTP status code from an access log. Consequently, a fatal from one service and a 502 from another appear side by side under the same filter. From that error view, the time chart and the Patterns panel tell you when the failures clustered and which ones dominate.
One pill for every error dialect
The reason grepping for error falls short is that failures do not agree on a word. A Node service might log fatal, a Python service critical, a Go service err, and an access log nothing at all beyond a 500 status.31 Searching one keyword catches one dialect and silently drops the rest, which is how a real failure hides in plain sight during an incident.
Fatals, crits, and 500s all count
Big Log Explorer normalizes as it indexes, folding fatal, crit, and critical and anything starting with err into a single error class, and mapping 5xx access-log statuses to the same class.32 The ERROR pill then filters on that normalized class rather than on any literal string. Consequently, clicking it once surfaces every server-side failure in the file regardless of which vocabulary produced it. Furthermore, because the normalization happens during indexing, the filter stays instant even on a large log, since it selects pre-classified records from IndexedDB rather than scanning text.45 You get a complete error view without having to remember every synonym a given framework might have used, which is exactly what you want when something is on fire.
The class is also stable across formats, which is the part a flat text search cannot offer. A JSON app log, an ISO syslog line, and a CLF access log each express severity differently, yet after normalization they share the same error bucket, so the ERROR pill treats them as one stream. That is what makes a mixed export, where app and access lines are interleaved, sortable by failure rather than by origin.
When the errors started
Knowing which lines are errors is half the answer, and knowing when they began is the other half. The time chart plots line counts per time bucket across the whole file, and with the ERROR pill active it plots only the errors.6 A healthy service shows a flat, low error baseline, so a failure announces itself as a sudden vertical spike that you can see before reading a single line.6 That visual cue is often the fastest way to locate an incident in a long log.
Dragging across the spike filters the viewer to those minutes, so you read the errors in the window where they clustered rather than scattered through the day. Because the chart and the pill share the same indexed data, switching between them is instant.4 Furthermore, the shape of the spike itself is informative, since a sharp cliff suggests a deploy or a dependency dropping, while a slow ramp suggests a leak or a queue filling over time.
Pairing the chart with the Patterns panel
The chart tells you when, but the Patterns panel tells you what, and the two read best together. Once you drag across the spike to lock the time window, the panel ranks the error templates inside that window, so the failure that caused the cliff sits at the top rather than buried in the surrounding noise.7 That pairing turns a vague sense of when something broke into a specific, countable failure you can act on, without leaving the ERROR view.
Which error dominates
A spike of errors is rarely a single failure, but usually one dominant failure plus a scatter of unrelated noise. Reading them in order tells you little about which one matters, because a loud, frequent error and a rare, incidental one look the same line by line. The Patterns panel answers the question that raw reading cannot: which error is actually driving the incident. Catching every error severity in logs surfaces the dominant failure across services that spell it differently, because the ERROR pill folds fatal, crit, and 5xx into one filter.
Ranking errors by frequency
With the ERROR pill active, the Patterns panel clusters the error lines by normalized template and ranks them by count.7 The template that tops the list is, by definition, the failure happening most, and its count tells you the scale. Consequently, you move from a wall of red lines to a ranked list of distinct error types in one glance. Clicking Filter on the top template pulls just those lines into the viewer, and adding the time window confirms whether that error is the one that spiked. Furthermore, a second template rising unusually high often reveals a knock-on failure, the downstream effect of the first, which helps you separate cause from symptom without guessing. That ranking is frequently the difference between a fast recovery and chasing the wrong thread.
Turn to this the moment a service misbehaves and you have its log. Drop your export into Big Log Explorer and click the ERROR pill first, before you read a single line, to see the full failure count regardless of which vocabulary each service used. The time chart shows when the failures started, and the Patterns panel ranks which one dominates. It works equally on application logs with textual levels and access logs where the severity is an HTTP status, so a mixed incident export stays readable.
Errors that do not use the word error
grep -i error app.log # misses fatal, crit, and 500s
Click the ERROR pill; every error-class line appears regardless of wording
Normalization folds fatal, crit, err, and 5xx into one class.
Locating when the failures began
Scrolling a day of logs to find the spike
With ERROR active, read the time chart and drag across the spike
The chart plots only error lines, so the incident is visible before reading.
Deciding which error to fix first
Hundreds of red lines, unclear which matters
Open the Patterns panel to rank error templates by count
The top template is the failure happening most.
- 1.
Python Software Foundation, "logging — Logging facility for Python," docs.python.org, accessed July 2026. https://docs.python.org/3/library/logging.html
- 2.
R. Fielding, M. Nottingham, and J. Reschke, "HTTP Semantics," RFC 9110, IETF, June 2022. https://datatracker.ietf.org/doc/html/rfc9110
- 3.
Apache Software Foundation, "Levels — Apache Log4j 2," logging.apache.org, accessed July 2026. https://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Level.html
- 4.
MDN, "IndexedDB API," developer.mozilla.org, accessed July 2026. https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
- 5.
MDN, "Using Web Workers," developer.mozilla.org, accessed July 2026. https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers
- 6.
Grafana Labs, "Loki LogQL documentation," github.com, accessed July 2026. https://github.com/grafana/loki
- 7.
logpai, "Drain3: A robust streaming log template miner based on the Drain algorithm," github.com, accessed July 2026. https://github.com/logpai/Drain3
Click the ERROR pill. Big Log Explorer normalizes severities during indexing, folding fatal, crit, critical, and anything starting with err into one error class, and mapping 5xx access-log statuses to it as well. The pill filters on that class rather than a literal keyword, so it catches every error-class line regardless of which word or status a given service used.
Yes. For Common Log Format and Combined Log Format lines, CapyToolkit's Big Log Explorer maps the HTTP status to a level, so any 5xx becomes error and any 4xx becomes warn. That means a 500 or 502 in an access log appears under the ERROR pill alongside application errors, letting a mixed export of app and access logs be triaged with a single filter.
Activate the ERROR pill and read the time chart, which then plots only error-class lines per time bucket across the file. A failure shows up as a spike above the flat baseline, often visible before you read any line. Dragging across the spike filters the viewer to those minutes, so you read the errors in the window where they clustered.
Let frequency guide you. With the ERROR pill active, the Patterns panel clusters error lines by template and ranks them by count, so the failure happening most sits at the top. Click Filter on it to isolate those lines. A second template rising sharply often signals a knock-on effect, which helps you tell the root cause from its downstream symptoms.
Yes. The entire process runs in your browser: the file is read with the File API, parsed in a Web Worker, and stored in a session-scoped IndexedDB database. The ERROR pill, time chart, and Patterns panel all operate on that local index, and nothing is sent to a server. The database is deleted when you close the tab, so the log leaves no trace.
- 1.
World Wide Web Consortium, "File API," w3.org, August 2026. https://www.w3.org/TR/FileAPI/
- 2.
Mozilla Developer Network, "Using Web Workers," developer.mozilla.org, accessed June 2026. https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers
- 3.
Mozilla Developer Network, "IndexedDB API," developer.mozilla.org, April 2025. https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
- 4.
Kubernetes, "Logging Architecture," kubernetes.io, accessed September 2026. https://kubernetes.io/docs/concepts/cluster-administration/logging/
- 5.
Docker, "docker container logs," docs.docker.com, accessed September 2026. https://docs.docker.com/reference/cli/docker/container/logs/
- 6.
Wikipedia, "JSON streaming," en.wikipedia.org, accessed June 2026. https://en.wikipedia.org/wiki/JSON_streaming
- 7.
ISO, "ISO 8601-1:2019 - Date and time — Representations for information interchange — Part 1: Basic rules," iso.org, February 2019. https://www.iso.org/standard/70907.html
- 8.
Wikipedia, "Common Log Format," en.wikipedia.org, accessed June 2026. https://en.wikipedia.org/wiki/Common_Log_Format
- 9.
Nginx, "Module ngx_http_log_module," nginx.org, accessed June 2026. https://nginx.org/en/docs/http/ngx_http_log_module.html