Deviations from stdlib logging

Updated Jul 05, 2026
  • No LoggerAdapter.
  • log() and the convenience methods (debug, info, warning, error, critical, exception) return the formatted string instead of None.
  • Records lack extra, lazy formatting, and calling-module introspection. exc_info and stack_info are supported as keyword-only arguments to log() and the convenience methods.
  • Handlers expect handle(logger, level, message) rather than emit(LogRecord) and run on dedicated worker threads. Existing stdlib logging.Handler subclasses can be reused via StdlibHandlerAdapter, which adapts emit(LogRecord)-based handlers to the runtime's handle API.
  • The dictConfig schema lacks incremental updates, handler filters, handler levels, and formatter attachment. fileConfig is likewise cut down.
  • Queue capacity is capped (1 024 per logger/handler). The stdlib blocks the emitting thread; femtologging drops records and emits warnings instead.
  • Formatting styles (%, {}, $) are not implemented. Provide the final string, or supply a callable formatter per handler.
  • The logging manager is separate from logging’s global state. Mixing both systems in the same process is unsupported.