Log Line Parser
Parse nginx, Apache, JSON, or custom-regex log lines into a color-coded table with stats. Runs entirely in your browser.
Input
How it works
- Pick a format and paste your log lines — one per line. Parse runs each line through the matching parser.
- Nginx / Apache combined extract time, remote address, method + path from the request, status, bytes, referer, and user agent; status codes are color-coded (2xx green, 3xx blue, 4xx amber, 5xx red).
- JSON lines flatten each object’s top-level keys into table columns; Custom lets you supply your own regex with named groups.
- Below the table you get a summary: total lines, parsed, failed lines, and a status-code histogram. Copy JSON exports the parsed objects.
About Log Line Parser
Access logs are the first place to look when something feels off — slow requests, 404 crawls, or a burst of 5xx. This parser turns raw combined-format lines into a readable table plus a histogram, so you can spot the pattern without firing up a full log-analysis stack.
Everything runs locally: your log lines never leave the browser. The table caps at 200 displayed rows for performance, but the stats cover every line you paste. The custom mode uses JavaScript regular expressions with named groups, so any log format you can describe with a regex becomes a table.
What the built-in patterns actually pin down
The nginx and Apache patterns are fully anchored with `^` and a trailing `$`, and the three quoted fields — request, referer, user agent — are matched as `[^\"]*`. That single decision is the parser's sharpest limit: a user-agent string containing a literal double quote, which real agents do send, terminates the field early and the whole line fails to match. The same applies to a space inside any of the three leading `\S+` tokens, since whitespace is the field separator.
nginx accepts one extra optional quoted group after the user agent, which is why a trailing `"-"` on the end of a line is tolerated there and not in the Apache pattern. Once matched, the request string is split on spaces after the fact: element zero is the method, element one the path, and the HTTP version is discarded. A request line with an embedded space in the target therefore shifts the path column rather than failing.
Timestamps stay strings, so nothing gets sorted
`time_local` holds the raw bracketed text, `08/Sep/2026:14:23:11 +0000`, exactly as captured. It is never parsed into a date, never normalised to UTC, and never compared — the offset is carried along as decoration. Rows come out in paste order, so a rotated-and-concatenated file keeps its out-of-order timestamps, and no column of these results is sortable by time without a second pass.
Two other fields resist arithmetic for similar reasons. `body_bytes_sent` keeps the literal `-` that nginx writes when no body was sent, so the column mixes strings and numbers. The status histogram only counts values matching three digits exactly, which quietly excludes any status a custom pattern captured with surrounding text.
Custom patterns and very large pastes
Custom mode builds a JavaScript `RegExp` from your source with no flags, so `^` and `$` anchor a single line, and the named groups become the table columns — the union of group names across all parsed rows, in first-seen order. There is no execution timeout, which means a pattern with nested quantifiers can backtrack pathologically and lock the tab rather than fail. A loose source-level test checks that at least one `(?<name>` appears, so an invalid group name surfaces as a constructor error instead.
Display is capped at 200 rows with a note about the remainder, while the statistics cover every non-blank line you pasted. The catch is memory: the whole paste lives in one string, is split into an array of line strings, and every successfully parsed object is retained in an array for the JSON export. Multi-megabyte pastes are handled in one blocking synchronous pass, so for real log files a streaming command-line tool is the better instrument.
Frequently Asked Questions
How do I parse log files online?
What log formats are supported?
Is my data sent to a server?
Do I need an account or API key?
Can I use these tools offline?
All processing happens in your browser. No uploads, no tracking, no servers. Your API keys, configs, and private payloads stay private — 100% client-side.