Mam mały projekt python, który ma następującą strukturę -
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
Planuję użyć domyślnego modułu rejestrującego do drukowania komunikatów na standardowe wyjście i pliku dziennika. Aby użyć modułu rejestrującego, wymagana jest inicjalizacja -
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
Obecnie wykonuję tę inicjalizację w każdym module przed rozpoczęciem rejestrowania komunikatów. Czy można wykonać tę inicjalizację tylko raz w jednym miejscu, tak aby te same ustawienia były ponownie używane po zalogowaniu się w całym projekcie?
package/__init__.py
. To zwykle nie jest miejsce, w którym umieszczasz if __name__ == '__main__'
kod. Przykład prost wygląda na to, że przy imporcie wywoła kod konfiguracji bezwarunkowo, co nie wydaje mi się właściwe. Zasadniczo rejestrowanie kodu konfiguracyjnego powinno odbywać się w jednym miejscu i nie powinno być efektem ubocznym importu, z wyjątkiem importowania __main__.
if __name__ == '__main__'
? (nie jest to wyraźnie wspomniane, jeśli tak jest)
fileConfig
w każdym module logującym się, chyba że maszif __name__ == '__main__'
logikę we wszystkich. odpowiedź prost nie jest dobrą praktyką, jeśli pakiet jest biblioteką, ale może ci się przydać - nie należy konfigurować rejestrowania pakietów bibliotek, oprócz dodawaniaNullHandler
.