JSON log viewer

Input
Output

JSON Log Viewer

Structured logs are one JSON object per line, which is great for machines and hard for people. Paste them, or drop the .log file, and read them as a table of time, level and message, each line opening to its full JSON, with filters for level, text, time and any field.

Example: the failing requests in an API's logs

Four log lines. Where status>=500 keeps the two requests that failed, whatever their level; Show: matching lines gives them as they were, to copy:

Logs (NDJSON)

{"time":"2026-10-29T10:00:04Z","level":"info","msg":"GET /v1/orders/ORD-20419","service":"orders-api","status":200}
{"time":"2026-10-29T10:00:09Z","level":"warn","msg":"Slow query","service":"orders-api","ms":1840}
{"time":"2026-10-29T10:00:12Z","level":"error","msg":"Payment gateway timeout","service":"payments","status":504}
{"time":"2026-10-29T10:00:12Z","level":"info","msg":"POST /v1/orders","service":"orders-api","status":502}

Output

{"time":"2026-10-29T10:00:12Z","level":"error","msg":"Payment gateway timeout","service":"payments","status":504}
{"time":"2026-10-29T10:00:12Z","level":"info","msg":"POST /v1/orders","service":"orders-api","status":502}

How do I use the JSON log viewer?

  1. Paste the logs or drop the file: JSON lines, a JSON array, or plain text lines.
  2. Pick a level, search text, or write Where conditions like status>=500, service=api.
  3. Open a line for all its fields, or Show: matching lines to copy just those.

What does the JSON log viewer do?

  • pino and bunyan numeric levels, and level names
  • Times in ms, seconds or ISO, shown in UTC
  • Any field as a column, nested ones like user.id too

When to use the JSON log viewer

Services that log JSON, through pino, bunyan, winston, Zap, Logrus or structlog, write one object per line: a time, a level, a message and whatever fields the code added. That's easy to search with tools, and hard to read in a terminal. Here each line becomes a row, errors stand out, and any line opens to show all its fields.

The time is found under time, timestamp, @timestamp or ts, in milliseconds, seconds or ISO text; a time with no zone is read as UTC, which is what the table shows. The level comes from level, severity or levelname, including pino's numbers (30 info, 40 warn, 50 error). Text lines like 2026-10-29 10:00:09 ERROR … are read too. Where takes conditions joined by commas: status>=500, service=api, user.id=7, msg~timeout. From and To take times, or last 15m, 2h or 1d before the newest line.

Frequently asked questions

How big a file can it open?
The table shows the first 1,000 matching lines and the counts cover them all; filter to narrow it down. For files of hundreds of megabytes, use Large file viewer, which reads them in parts.
Can I export the lines I filtered?
Show: matching lines gives just those lines, as they were, to copy or save. Copy on the table does the same.
Is my data uploaded?
No. Bracely runs entirely in your browser, so nothing you paste or open leaves your device.

More JSON tools

Bracely has 104 JSON tools in one page. Related ones:

Runs entirely in your browser. Nothing you paste is uploaded. Made by Saurabh Pagrut · About · Privacy policy
Last updated · Version 6.1 · Changelog
Saurabh Pagrut on GitHub · LinkedIn · X · YouTube · Instagram