Nginx writes two very different log files by default: access.log, one line per request in the combined format, and error.log, a free-text stream of worker warnings, upstream failures and connection errors. Neither is JSON, and dashboards, log shippers (Filebeat, Fluent Bit, Logstash) and alerting systems generally want structured records instead of raw text. Nginx Log to JSON Converter parses both halves of the Nginx world — access lines and error lines — into clean, consistent JSON objects in a single paste, entirely in your browser.
Access lines become objects with the remote IP, the authenticated user (when logged), a parsed timestamp, the request split into method / path / protocol, HTTP status, response bytes, Referer, User-Agent, and the X-Forwarded-For chain when your log_format appends it — useful for attributing requests to the real client behind a load balancer or CDN. Error lines are handled by a completely different parser: they map the timestamp, severity (error, warn, notice, crit...), the worker PID and thread ID, the *N connection marker Nginx uses to correlate log lines from the same connection, and the trailing key/value metadata — client, server, request, upstream, host — onto the same flat record shape, with whatever text remains left as the message field. Auto-detect tells access and error lines apart automatically by inspecting the start of each line, so a file that interleaves both (or a paste that mixes an access.log excerpt with a matching error.log excerpt for the same incident) converts correctly in one pass without manual splitting.
Two timestamp dialects are recognized on the access side: the classic Apache-style bracketed time ([10/Oct/2000:13:55:36 -0700]) and the $time_iso8601 variant some configs switch to ([2026-08-15T09:12:33+00:00]); the error log’s own YYYY/MM/DD HH:MM:SS format is parsed separately. All three are converted to a real UTC instant, and you choose how that instant is rendered in the output: ISO 8601 UTC for readability and sorting, Unix milliseconds for time-series tooling, or the original raw Nginx string if you want to keep it verbatim. Output can be a pretty-printed JSON array for reading, a compact single-line array to save space, or JSONL (one JSON object per line) for streaming into jq, a log shipper, or a script that reads line by line. Nothing is uploaded — parsing, timestamp conversion and formatting all happen locally, and the result never leaves the page until you copy or download it.