Apache is everywhere, but its access and error logs are plain text — and the pipelines that consume logs today (Logstash, Fluentd, jq, Python, a warehouse table) all want JSON. Apache Log to JSON Converter parses Common Log Format, Combined Log Format and the default error_log format into structured records you can feed straight in, with no server, no upload and no bespoke regex to write yourself.
Each access line becomes an object with the remote IP, identity and authenticated user, a parsed timestamp, the request method/path/protocol split out of the quoted request string, a numeric HTTP status, a numeric byte count, and — when the line is Combined format — Referer and User-Agent. Error log lines map onto the same idea: timestamp, module:level (for example core:error or php7:notice), PID and TID when the line has them, the client IP (and port, when Apache logs one), and the free-text message. Auto-detect tells the two dialects apart per line by checking whether it opens with a bracketed timestamp, so a file containing both access and error lines — or a debugging session where you’ve pasted snippets of each — converts correctly in one pass without you separating them first.
Apache’s placeholder convention of writing a bare - for a missing identity, user, referer or user-agent is handled explicitly: with Skip ‘-’ placeholders checked (the default), those fields are simply omitted from the JSON object; unchecked, they’re kept as explicit null values so every record has the same shape, which matters if you’re loading the output into a schema-checked table.
Output is flexible on two axes. Timestamps can stay as the raw Apache string, or be converted to ISO 8601 in UTC (correctly applying the log’s own +HHMM/-HHMM offset before converting), or to Unix milliseconds for systems that sort or bucket on epoch time. And the JSON shape itself can be a pretty-printed array for reading, a compact single-line array for smaller payloads, or JSONL — one record per line — for streaming ingestion tools that read line-by-line; the download button follows whichever shape you picked, saving a .json or .jsonl file as appropriate. Everything — parsing, timestamp math, JSON serialization — runs locally in your browser; nothing is sent to a server.