Skip to content

Speed up logging.getLogger() for already-registered loggers #150818

@gaborbernat

Description

@gaborbernat

logging.getLogger(name) returns the singleton logger for a name, creating it on first use. Every call takes the logging lock, even the overwhelmingly common case where the logger already exists and is returned unchanged.

Libraries fetch their logger by name throughout their code — at module import and often again inside functions — so the same handful of names are looked up over and over for the lifetime of a process. These repeat lookups are pure overhead: the logger is already there.

Resolving logger names collected from the top-1000 corpus takes 6.68 µs today and 5.02 µs with a lock-free fast path for the already-registered case, 33% faster. First-time creation, placeholder resolution and the parent/child wiring still run under the lock exactly as before, and the fast path relies only on an atomic dict lookup so it is safe under both the GIL and free threading.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions