Seite 1 von 1

logging in einem Klassenmodul ...

Verfasst: Mittwoch 22. Oktober 2025, 10:02
von drnicolas
Ich werd nochmal wahnsinnig mit dem Logging meiner Applikation.

Im Hauptprogramm und den weiteren Modulen scheint es ganz gut zu funktionieren.

1. in setup_logger.py wird ein mainlogger definiert mit mehreren Handlern
2. in main.py habe ich

Code: Alles auswählen

from setup_logger import mainlogger
Damit logge ich so wie ich mir das vorstelle
3. in anderen Modulen habe ich dieselbe import Zeile - geht auch so wie gewünscht

Mein Problem sind Klassen:
CoPilot wollte, dass ich in init() (warum eigentlich nicht __init__ ?)
einfüge:

Code: Alles auswählen

self.logger=logging.getlogger(__name__)
Das läuft auch syntaktisch durch, ich sehe aber dennoch keine Meldungen.
Auch ein ergänzendes self.logger.setlevel(logging.DEBUG) macht das nicht besser
Der code wird beim initialisieren der Klasse aufgerufen.

Der Trick an einer Klasse ist doch, dass ich OHNE expliziten Verweis auf mein hard-gecodetes "mainlogger" klarkommen müsste, oder?

Re: logging in einem Klassenmodul ...

Verfasst: Mittwoch 22. Oktober 2025, 11:15
von __blackjack__
@drnicolas: Gegenfrage: Warum importierst Du in der `main.py` einen Logger aus einem anderen Modul, statt da auch ``logging.getLogger(__name__)`` zu machen, wie das eher üblich wäre. Was ist das für ein `mainlogger`? Warum gibt es den? Hast Du den Root-Logger konfiguriert? Das ist in der einfachsten Variante ja das einzige was man machen muss/sollte. *Der* filtert, formatiert, und behandelt alles was von Kind-Loggern kommt. Die haben per Voreinstellung weder ein Level, noch machen die irgend was anderes als die Log-Datensätze weiter in der Hierarchie hoch zu reichen.

Re: logging in einem Klassenmodul ...

Verfasst: Mittwoch 22. Oktober 2025, 12:09
von Sirius3
@drnicolas: vor einem Monat waren wir doch schonmal hier: viewtopic.php?p=435249#p435249
Warum importierst Du jetzt wieder mainlogger überall?

Re: logging in einem Klassenmodul ...

Verfasst: Mittwoch 22. Oktober 2025, 19:17
von drnicolas
schon richtig; ich hantiere jetzt schon ewig herum und kriege es immer nur halbwegs hin.

Ich habe viele Versionen ausprobiert, überall findet man unterschiedliche Varianten und sogar die KI sagt heute Müll und morgen was anderes.

@ blackjack: in der setup_logger.py wird eben dieser "mainlogger" erstellt und konfiguriert.

In allen Modul-Dateien importiere ich eben diesen mainlogger und nutze den dann; das funktioniert auch prima.
Ob das die schönste Variante ist - weiss ich nicht. Es scheint auch nochmal anders zu gehen.

Für meine Klasse würde ich davon ausgehen, dass ich dort KEINEN import dieses spezifischen mainloggers machen darf, ich will ja schliesslich flexibel sein und eine andere Applikation, die ebenfalls diese Klasse nutzt weiss ja nichts von MEINEM mainlogger, oder?

Re: logging in einem Klassenmodul ...

Verfasst: Mittwoch 22. Oktober 2025, 19:48
von Sirius3
Ja, da hast Du recht, diesen mainlogger sollte es nicht geben.
Hast Du schon das Tutorial durchgearbeitet? https://docs.python.org/3/howto/logging.html