Die bewährte Praxis ist, in jedem Modul einen Logger wie folgt zu definieren:
import logging
logger = logging.getLogger(__name__)
in der Nähe des oberen Bereichs des Moduls, und dann im anderen Code im Modul z.B.
logger.debug('Meine Nachricht mit %s', 'Variablendaten')
Wenn Sie die Protokollierungsaktivität innerhalb eines Moduls unterteilen müssen, verwenden Sie z.B.
loggerA = logging.getLogger(__name__ + '.A')
loggerB = logging.getLogger(__name__ + '.B')
und protokollieren Sie bei Bedarf mit loggerA
und loggerB
.
In Ihrem Hauptprogramm oder Programmen tun Sie z.B.:
def main():
"Ihr Programmcode"
if __name__ == '__main__':
import logging.config
logging.config.fileConfig('/pfad/zu/logging.conf')
main()
oder
def main():
import logging.config
logging.config.fileConfig('/pfad/zu/logging.conf')
# Ihr Programmcode
if __name__ == '__main__':
main()
Siehe hier für das Protokollieren aus mehreren Modulen und hier für die Protokollierungskonfiguration für Code, der als Bibliotheksmodul von anderem Code verwendet wird.
Aktualisierung: Beim Aufruf von fileConfig()
möchten Sie möglicherweise disable_existing_loggers=False
angeben, wenn Sie Python 2.6 oder höher verwenden (siehe die Dokumentation für weitere Informationen). Der Standardwert ist True
für Abwärtskompatibilität, was bewirkt, dass alle vorhandenen Logger durch fileConfig()
deaktiviert werden, es sei denn, sie oder ihre Vorgänger sind explizit in der Konfiguration benannt. Mit dem Wert False
bleiben vorhandene Logger unberührt. Wenn Sie Python 2.7/Python 3.2 oder höher verwenden, sollten Sie die dictConfig()
-API in Betracht ziehen, die besser als fileConfig()
ist, da sie mehr Kontrolle über die Konfiguration bietet.