Implementacja loggera jest już singletonem.
Wielokrotne wywołania loggera.getLogger („someLogger”) zwracają odwołanie do tego samego obiektu rejestrującego. Dotyczy to nie tylko tego samego modułu, ale także między modułami, o ile jest to w tym samym procesie interpretera języka Python. Dotyczy to odniesień do tego samego obiektu; dodatkowo, kod aplikacji może definiować i konfigurować nadrzędny rejestrator w jednym module i tworzyć (ale nie konfigurować) podrzędny rejestrator w oddzielnym module, a wszystkie wywołania logera do dziecka będą przekazywane do rodzica. Oto główny moduł
Źródło - korzystanie z logowania w wielu modułach
Tak więc powinieneś to wykorzystać -
Załóżmy, że stworzyliśmy i skonfigurowaliśmy rejestrator o nazwie „main_logger” w głównym module (który po prostu konfiguruje rejestrator, nic nie zwraca).
# get the logger instance
logger = logging.getLogger("main_logger")
# configuration follows
...
Teraz w module podrzędnym, jeśli utworzymy rejestrator podrzędny zgodnie z hierarchią nazewnictwa „main_logger.sub_module_logger” , nie musimy go konfigurować w module podrzędnym. Wystarczy utworzyć rejestrator zgodnie z hierarchią nazewnictwa.
# get the logger instance
logger = logging.getLogger("main_logger.sub_module_logger")
# no configuration needed
# it inherits the configuration from the parent logger
...
I nie doda również zduplikowanej obsługi.
Zobacz to pytanie, aby uzyskać bardziej szczegółową odpowiedź.