Structured logging produces JSON Lines — a single JSON object per line, one of the most common shapes for application and service logs (Node, Python, Go, Bunyan, Pino, structlog and most log shippers can all emit it). Machines love it; the human eye does not, especially when you are scrolling a terminal at 2am trying to find the one line that matters. JSONL to Log Converter turns those records back into readable log text with a layout you choose, entirely client-side.
Pick key=value pairs for a compact, complete line where every field from every record is visible (values containing spaces, an = sign, or a quote are automatically wrapped in quotes and escaped so the line still parses as tokens), a timestamp + level + message format that reads like a classic application log with any remaining fields appended in parentheses, or write a fully custom template using {placeholder} tokens that resolve against each record — including nested paths like {user.id} or {db.host} for values buried inside nested objects.
Time, level and message fields are auto-detected across common naming conventions — ts/time/timestamp/@timestamp/datetime/date for time, level/severity/loglevel/log_level/priority for level, message/msg/event/text/detail/log for the text — checked case-insensitively so a field named Level or MESSAGE is still recognized. Once a field is used for timestamp, level or message, it will not also show up as a duplicate in the remaining-fields list, so the timestamp+level layout stays clean instead of repeating data. Timestamps can stay exactly as they arrived, or be normalized to ISO 8601 UTC or Unix milliseconds so records from different sources sort and compare consistently. Nested objects and arrays are printed as compact inline JSON rather than being flattened or dropped, so no information is lost in the conversion. Everything runs locally in your browser — paste JSONL, pick a layout, convert, and nothing is ever sent to a server.