# Raw logs

Text with no grammar at all, until one is found in it.

## How it opens

Raw logs parses into the records shape — many rows of the same shape, browsed as a list with a per-row view.

Nothing is chosen by file extension alone: every adapter scores the text itself and the highest confidence wins. When two are close enough that guessing would be a coin flip, the app asks instead of picking.

- extensions · .log, .txt, .out
- media type · text/plain
- shape · records
- extra diagnostics · none beyond the parse errors

## Fixing

Records fail one at a time, so repair does too: broken rows are grouped by cause and fixed by the group, or all at once. A whole-document pipeline is never run over this format — it would glue the records together and drop the rest.

Rows that match no pattern are counted and kept, never hidden.

## Nesting

A Raw logs value can hold another system's output — a stringified body, an escaped document. Unpack opens it in place, names the parser that opened it, and repeats until nothing parses. Pack restores the original text byte for byte rather than re-serializing from the tree.

## A sample

The document below is the fixture this adapter ships and its own tests parse — not an illustration written for this page.

```
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
```

plain text — timestamped logfmt, extracted by pattern

---

Canonical: https://unstringify.com/docs/log
