Professionelles Logging int mittelgroßen Projekten
Verfasst: Freitag 5. März 2021, 16:22
Hi,
ich habe ein Projekt mit ~30.000 Zeilen Python Code und bin mit meinem bisherigen Logging Ansatz sehr unzufrieden.
Daher würde mich sehr interessieren, wie es professioneller geht.
Beim Startpunkt meiner Skriptes ist folgender Code:
Ein paar Libraries, die ich mit weiteren Projekten teile, haben folgenden Code:
Einige Skripte in meinen Projekt führen Testreihen aus, und sollen pro Skript in ein eigenes Logfile schreiben.
Daher habe ich mir in meiner Main eine Funktion, die den Modulen explizite Logger eingeschreibt:
Die Skripte haben jeweils eine Interface Funktion, um die registrierung der Logger zu ermöglichen:
In Zukunft hatte ich zudem geplant, pro modul ein .yml config File zu erstellen und dieses zu laden. Das würde das etwas unschöne
registrieren verhindern.
Wenn ich den Code so ansehe wirkt er für mich wie lieblos dahin gehackt, gibt es hier einen anderen best practice Ansatz
den ich noch nicht kenne?
Ich würde gerne verhindern, dass es eine Eltern Kind beziehung zwischen meinem Einstiegsmodul und den Skripten gibt.
Es wäre zb schön, wenn ich den globalen Logger umschreiben könnte und die einzelnen Skripte beim holen des loggers
automatisch den richtigen Pfad, Loglevel etc bekommen.
ich habe ein Projekt mit ~30.000 Zeilen Python Code und bin mit meinem bisherigen Logging Ansatz sehr unzufrieden.
Daher würde mich sehr interessieren, wie es professioneller geht.
Beim Startpunkt meiner Skriptes ist folgender Code:
Code: Alles auswählen
import logging
logger = logging.getLogger(__name__)
logging.basicConfig()
Code: Alles auswählen
import logging
logger = logging.getLogger(__name__)
Daher habe ich mir in meiner Main eine Funktion, die den Modulen explizite Logger eingeschreibt:
Code: Alles auswählen
def getPretteLogger(Loglevel, ....):
newLogger = ...
# apply handlers etc
return newLogger
def registerLogger():
skript1Logger = getPrettyLogger(..)
skript1.registerLogger(skript1Logger)
Die Skripte haben jeweils eine Interface Funktion, um die registrierung der Logger zu ermöglichen:
Code: Alles auswählen
logger = logging.getLogger(__name__)
def registerLogger(skript1Logger):
global logger
logger = skript1Logger
registrieren verhindern.
Wenn ich den Code so ansehe wirkt er für mich wie lieblos dahin gehackt, gibt es hier einen anderen best practice Ansatz
den ich noch nicht kenne?
Ich würde gerne verhindern, dass es eine Eltern Kind beziehung zwischen meinem Einstiegsmodul und den Skripten gibt.
Es wäre zb schön, wenn ich den globalen Logger umschreiben könnte und die einzelnen Skripte beim holen des loggers
automatisch den richtigen Pfad, Loglevel etc bekommen.