One Record per Request: How BareProxy Tracing Works
Every request BareProxy handles gets a random ID, sent to the backend and back to the client in a BareProxy-Id header, and shown on every error page BareProxy writes. When someone reports a problem, they can quote it.
Every request also leaves exactly one record: one JSON line with the rule that matched, the config version that handled it, the file it served or every backend it tried or passed over and why, and the timings. Records go to the trace log and stay in memory for quick lookups.

why turns a record back into a story, showing each rule as it was written in the config version that handled the request, even if the config has changed since. tail follows records as they happen, with filters such as status>=500 or pool=api. Each record also carries an outcome, so a glance at the log tells how much traffic came from files, from backends, from BareProxy itself, or was refused.
If a request carries a W3C traceparent header, BareProxy joins that trace, so its records line up with the application’s own. The Export module, planned for later, will also send records to OpenTelemetry and log stores.