Próbuję dodać rejestrowanie (do konsoli, a nie pliku) do mojego kodu, nad którym pracowałem od dłuższego czasu. Przeczytawszy trochę, mam wzorzec, który moim zdaniem powinien zadziałać, ale nie jestem do końca pewny, dokąd zmierza.Rejestrowanie w języku Python w wielu modułach
Mam następujące trzy pliki (uproszczone, oczywiście):
controller.py
import my_module
import logging
from setup_log import configure_log
def main():
logger = configure_log(logging.DEBUG, __name__)
logger.info('Started logging')
my_module.main()
if __name__ == "__main__":
main()
setup_log.py
import logging
def configure_log(level=None, name=None):
logger = logging.getLogger(name)
logger.setLevel(level)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
chFormatter = logging.Formatter('%(levelname)s - %(filename)s - Line: %(lineno)d - %(message)s')
console_handler.setFormatter(chFormatter)
logger.addHandler(console_handler)
return logger
my_module.py
import logging
def main():
logger = logging.getLogger(__name__)
logger.info("Starting my_module")
print "Something"
if __name__ == "__main__":
main()
Kiedy biegnę th em, tylko pierwsze wywołanie do logowania generuje wyjście do konsoli - "Rejestrowanie rozpoczęte". Drugie wezwanie do logowania - "Uruchomienie mojego modułu" właśnie minęło.
Co zostało źle zrozumiane/zniekształcone?
Dlaczego konfigurujesz dwa osobne rejestratory ('__main__' i' my_module') w pierwszej kolejności, jeśli chcesz je skonfigurować dokładnie w ten sam sposób? Dlaczego po prostu nie użyjesz 'getLogger()' i użyjesz go wszędzie? – abarnert