Tools · raw logs

Log parser

Paste the log. The pattern is found for you and shown beside your lines with the matches counted — then the lines are records you can filter, open and compare.

no signup · runs entirely in your browser · ⌘V works anywhere on this page
See it done · 8 s
Parse a service log — The reading question beside the text — the shape it matched, how many lines — then Read as records, and f filters to the errors. · 8 s

What you get

  • Detects the pattern in the 5-line sample — timestamp, level, service, request id, message — and shows it as chips with a live preview
  • Says how many lines matched — “matches N of M lines · K kept as raw” — and keeps the unmatched ones in view
  • Lifts key=value pairs (logfmt) out of the message into fields of their own
  • Reads a Kibana Discover table copied as text — the time in Kibana’s own format, the columns split on runs of spaces — with a pattern written for exactly that paste
  • Level chips, a field=value filter, a per-record panel, Compare two runs by record, Convert to CSV, NDJSON or a Markdown table
  • Saves a pattern you wrote for the next file that looks like it

What it will not do

  • Tail or follow a file, or connect to a log store. It reads the text you paste or drop.
  • Invent structure. A line the pattern does not match is kept as raw text and counted, not dropped or guessed at.
  • Ask twice. The question is answered once per file, and Keep as text is a real answer with a door back.

The shapes it knows

Kibana Discover · copied rows

fields: ts · level · msg

Kibana document · field per line

fields: fieldName · fieldValue

Apache / nginx combined

fields: remote_addr · ident · remote_user · ts · request · status · bytes · referer · user_agent

syslog · RFC 5424

fields: pri · version · ts · host · app · procid · msgid · sd · msg

syslog · RFC 3164

fields: pri · ts · host · tag · pid · msg

Rails / Ruby logger

fields: sev · ts · pid · level · progname · msg

bracket prefix + JSON tail

fields: prefix · level · json

timestamped logfmt

fields: ts · level · service · request_id · msg · pairs

logfmt

fields: pairs

The sample

What the first sample opens — a real file, not an illustration written for this page.

checkout-api.log
2026-04-21T14:32:08.412Z INFO  [checkout-api] req=b29f0c1a stripe.charge.completed amount=17054 latency=88ms
2026-04-21T14:32:07.940Z WARN  [checkout-api] req=4471dd90 retry.scheduled attempt=2 backoff=400ms
2026-04-21T14:32:07.813Z ERROR [checkout-api] req=9c02fe13 stripe.webhook.signature_invalid
2026-04-21T14:32:07.512Z INFO  [checkout-api] req=08bb31f7 cart.items.priced items=2 total=14900
2026-04-21T14:32:06.301Z INFO  [auth-svc]     req=51e8cc02 session.token.issued ttl=3600

in VS Code

Read as records asks the reading question as QuickPick steps — the shape it matched, or your regex — then the rows open beside the text.

unstringify for VS Code14-day trial · Free and Pro

Questions

Which log formats does it read?

Logfmt, and any line with a timestamp, a level and a message it can find a pattern for. JSON lines open as NDJSON instead. A file it cannot find a pattern in is offered as text.

Can I write my own pattern?

Yes — a regular expression, edited beside the preview and saved for the next file that matches it.

Does it handle a Kibana or Elastic export?

A Discover CSV export opens as rows — see the CSV page. A raw log pasted from a console opens here.

What happens to lines that do not match?

They are counted — “N kept as raw” — and stay in the list as raw lines, never hidden.

Try it on the file that broke your afternoon.

free · no signup