Neu bei Python, deshalb weiß ich nicht, ob das ratsam ist, aber es funktioniert großartig, um Boilerplate nicht neu schreiben zu müssen.
Ihr Projekt muss eine __init__.py haben, damit es als Modul geladen werden kann.
# Setzen Sie dies in die __init__.py Ihrer Module
import logging.config
import sys
# Ich habe dieses Dictionary-Beispiel verwendet, Sie würden einfügen:
# logging.config.fileConfig('logging.conf')
# Der Eintrag "" in loggers ist der Stamm-Logger, Tutorials verwenden immer "root", aber ich kann das nicht zum Laufen bringen
logging.config.dictConfig({
"version": 1,
"formatters": {
"default": {
"format": "%(asctime)s %(levelname)s %(name)s %(message)s"
},
},
"handlers": {
"console": {
"level": 'DEBUG',
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout"
}
},
"loggers": {
"": {
"level": "DEBUG",
"handlers": ["console"]
}
}
})
def logger():
# Den Namen aus dem Aufrufer dieser Funktion erhalten
return logging.getLogger(sys._getframe(1).f_globals['__name__'])
sys._getframe(1)
Vorschlag stammt von hier
Dann können Sie Ihren Logger in jeder anderen Datei verwenden:
from [Ihrem Modulnamen hier] import logger
logger().debug("FOOOOOOOOO!!!")
Einschränkungen:
- Sie müssen Ihre Dateien als Module ausführen, sonst funktioniert
import [Ihr Modul]
nicht:
python -m [Ihr Modulname].[Ihr Dateiname ohne .py]
- Der Name des Loggers für den Einstiegspunkt Ihres Programms wird
__main__
sein, aber jeder Lösung mit __name__
wird dieses Problem haben.