Ich habe ein kleines Python-Projekt mit der folgenden Struktur:
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
Ich plane, das Standardprotokollierungsmodul zu verwenden, um Nachrichten an stdout und eine Protokolldatei zu drucken. Um das Protokollierungsmodul verwenden zu können, ist eine Initialisierung erforderlich.
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
Derzeit führe ich diese Initialisierung in jedem Modul durch, bevor ich mit der Protokollierung von Nachrichten beginne. Ist es möglich, diese Initialisierung nur einmal an einem Ort durchzuführen, sodass dieselben Einstellungen durch Protokollierung im gesamten Projekt wiederverwendet werden?
package/__init__.py
. Dies ist normalerweise nicht der Ort, an dem Sie if __name__ == '__main__'
Code eingeben. Außerdem sieht das Beispiel von prost so aus, als würde es den Konfigurationscode beim Import bedingungslos aufrufen, was für mich nicht richtig aussieht. Im Allgemeinen sollte die Protokollierung des Konfigurationscodes an einem Ort erfolgen und nicht als Nebeneffekt des Imports auftreten, außer wenn Sie __main__ importieren.
if __name__ == '__main__'
? (es wird nicht explizit in Frage gestellt, ob dies der Fall ist)
fileConfig
jedes Modul aufrufen , das die Protokollierung durchführt, es sei denn, Sie habenif __name__ == '__main__'
in allen Modulen Logik. Die Antwort von prost ist keine gute Vorgehensweise, wenn es sich bei dem Paket um eine Bibliothek handelt, obwohl dies möglicherweise für Sie funktioniert. Sie sollten die Anmeldung in Bibliothekspaketen nicht konfigurieren, außer eine hinzuzufügenNullHandler
.