Architectural overview

Updated Nov 11, 2025
  • Each FemtoLogger owns a bounded queue (capacity 1 024) and a worker thread that drains records and invokes handlers. Calls to logger.log() simply enqueue a record and return immediately.
  • Handlers (FemtoStreamHandler, FemtoFileHandler, FemtoRotatingFileHandler, and FemtoSocketHandler) also own dedicated queues and worker threads so file IO, stdout/stderr writes, and socket operations never block the calling code.
  • When any queue is full, the record is dropped. Each component emits rate-limited warnings and maintains drop counters (FemtoLogger.get_dropped() and handler-specific warnings) so you can monitor pressure.
  • Record metadata currently only tracks the logger name, level, message text, timestamps, and thread identity. The Python API does not yet expose rich LogRecord attributes such as the calling module or exception info.