Follow the literal record path
- PythonCapture and validate
- LoggerFilter and route
- ChannelBounded dispatch
- HandlerDedicated worker
- OutputI/O and flush
PyO3 exposes the runtime to Python. Producer-side level checks, callback filters, exception capture, and context validation happen before dispatch. Rust-owned records then cross crossbeam-channel queues to logger and handler workers.
Keep the queue boundaries separate
Dotted-name propagation determines which loggers see the record. Each queued record captures its handler set. Removing a handler affects future records; it does not rewrite pending dispatch.
Output workers isolate file and network I/O from the ordinary producer path. Python handlers and formatters still require the GIL. Bounded queues, callback cost, and blocking handler policies prevent a blanket guarantee of non-blocking logging.
Survey the machinery
- Coupling. Where Python hands the record to Rust
- Transport. Records crossing the channel in order
- Buffer bay. A bounded handler queue
- Crystal field. Output: stream, file, or network
The survey plate makes boundaries memorable; the literal path above defines the software model. The plate’s numbered markers follow the same order as that path. Read the capacity and shutdown contracts.