rich log · filter, fold and group a log
Screenshots
❯ rich log app.log booting checkout service v2.4.1 2026-10-18T10:00:00.000Z INFO request started {"service":"api","trace_id":"4bf92f3577b34da6","path":"/cart"} 2026-10-18T10:00:00.250Z INFO request started {"service":"web","trace_id":"00f067aa0ba902b7","path":"/"} 2026-10-18T10:00:01.100Z WARN upstream slow {"service":"api","trace_id":"4bf92f3577b34da6","latency_ms":812} 2026-10-18T10:00:01.900Z ERROR upstream timed out {"service":"api","trace_id":"4bf92f3577b34da6","latency_ms":3000} Traceback (most recent call last): File "checkout/cart.py", line 42, in total TimeoutError: inventory did not answer in 3s 2026-10-18T10:00:02Z INFO health check {"service":"web"} 2026-10-18T10:00:03Z INFO health check {"service":"web"} 2026-10-18T10:00:04Z INFO health check {"service":"web"} 2026-10-18T10:00:05.000Z ERROR connection refused {"target":"web::db","host":"db","port":"5432","trace_id":"00f067aa0ba902b7"} 18/Oct/2026:10:00:06 +0000 INFO GET /cart 200 {"remote_addr":"10.0.0.7","method":"GET","path":"/cart","protocol":"HTTP/1.1","status":200,"bytes":512,"user_agent":"cur l/8.4"} 18/Oct/2026:10:00:07 +0000 WARN GET /missing 404 {"remote_addr":"10.0.0.7","method":"GET","path":"/missing","protocol":"HTTP/1.1","status":404,"bytes":0,"user_agent":"cu rl/8.4"} WARN disk 91% full on /var ❯
❯ rich log app.log --level warn+ --where 'service=api' 2026-10-18T10:00:01.100Z WARN upstream slow {"service":"api","trace_id":"4bf92f3577b34da6","latency_ms":812} 2026-10-18T10:00:01.900Z ERROR upstream timed out {"service":"api","trace_id":"4bf92f3577b34da6","latency_ms":3000} Traceback (most recent call last): File "checkout/cart.py", line 42, in total TimeoutError: inventory did not answer in 3s ❯
❯ rich log app.log --where 'msg~health' --collapse --time relative +0.000s INFO health check {"service":"web"} × 3 (last +2.000s) ❯
❯ rich log app.log --group trace ▸ trace 4bf92f3577b34da6 · 3 records · 1 error · 1 warning · 1.900s 2026-10-18T10:00:00.000Z INFO request started {"service":"api","trace_id":"4bf92f3577b34da6","path":"/cart"} 2026-10-18T10:00:01.100Z WARN upstream slow {"service":"api","trace_id":"4bf92f3577b34da6","latency_ms":812} 2026-10-18T10:00:01.900Z ERROR upstream timed out {"service":"api","trace_id":"4bf92f3577b34da6","latency_ms":3000} Traceback (most recent call last): File "checkout/cart.py", line 42, in total TimeoutError: inventory did not answer in 3s ▸ trace 00f067aa0ba902b7 · 2 records · 1 error · 4.750s 2026-10-18T10:00:00.250Z INFO request started {"service":"web","trace_id":"00f067aa0ba902b7","path":"/"} 2026-10-18T10:00:05.000Z ERROR connection refused {"target":"web::db","host":"db","port":"5432","trace_id":"00f067aa0ba902b7"} ▸ no trace id · 7 records · 2 warnings · 5.000s booting checkout service v2.4.1 2026-10-18T10:00:02Z INFO health check {"service":"web"} 2026-10-18T10:00:03Z INFO health check {"service":"web"} 2026-10-18T10:00:04Z INFO health check {"service":"web"} 18/Oct/2026:10:00:06 +0000 INFO GET /cart 200 {"remote_addr":"10.0.0.7","method":"GET","path":"/cart","protocol":"HTTP/1.1","status":200,"bytes":512,"user_agent":"c url/8.4"} 18/Oct/2026:10:00:07 +0000 WARN GET /missing 404 {"remote_addr":"10.0.0.7","method":"GET","path":"/missing","protocol":"HTTP/1.1","status":404,"bytes":0,"user_agent":" curl/8.4"} WARN disk 91% full on /var Summary: 12 records error 2 · warn 3 · info 6 · no level 1 2 traces with errors: 4bf92f3577b34da6 (1 error), 00f067aa0ba902b7 (1 error) ❯