# Requirement change

Ops just paged us. During last night's traffic spike, request handling stalled for hundreds of
milliseconds at a time, and the profiler points straight at our own logging calls — one of our
destinations is a network sink with a slow, occasionally flaky connection, and every call to log
something waits for it.

**Logging must never block the request that's doing it.** Concretely:

- We need a way to register a destination as "asynchronous." A call to log something still
  reaches it eventually, but the calling thread must not wait around for that write to happen —
  it should feel, from the caller's point of view, like that destination isn't there at all.
- Before the process shuts down (or before a test wants to check what actually got written) we
  need one call that blocks until every asynchronous destination has genuinely caught up on
  everything logged before that call. We are not asking for a way to wait on one destination at
  a time — one "make sure everything is flushed" call is enough.
- The clock is still the source of truth for a record's timestamp, no matter how much later a
  slow destination gets around to writing it — a record logged at 10:00 must always say 10:00,
  even if it's actually written to disk at 10:02.
- Everything about synchronous destinations — the ones already there today — stays exactly as
  it is. This is additive.
