Seite 1 von 1

logging in Klassen oder (Untermodulen) ...

Verfasst: Samstag 20. September 2025, 07:47
von drnicolas
Ich fürchte, ich habe das logging -Modul noch immer nicht so ganz verstanden.

Derzeit mache ich das so:

Ich habe eine Moduldatei namens setup_logger.py, die einen logger namens 'mainlogger' mit verschiedenen Handlern erstellt( EMail, Datei und sylog; ist wharscheinlich ein bisschen übertrieben).

In der Haupt-Moduldatei - nennen wir sie main.py - wird zuoberst (ausserhalb main() mit 'from setup_logger import mainlogger' ausgeführt. Damit funktioniert mein logging

In anderen Modul-Dateien wird das gleiche gemacht. Somit funktioniert das logging wie gewünscht auch in den aufgerufenen Funktionen.

Nun habe ich noch 2 Klassendateien, in denen Klassen definiert werden, die in mehreren anderen Projekten einegesetzt werden (sollen). Auch dort mache ich ein 'from setup_logger import mainlogger'
Das würde aber voraussetzen, dass in allen Projekten eine setup_logger.py existiert - oder ?

Wie macht man sowas mehr generisch. Zusammengefasst sollen alle logging-EInträge eines Projektes in einen logger und dessen Handler gehen.

Re: logging in Klassen oder (Untermodulen) ...

Verfasst: Samstag 20. September 2025, 09:15
von __blackjack__
@drnicolas: Logging für das gesamte Programm konfiguriert man nur im Hauptmodul oder von dort aus, also wenn man das in einem anderen Modul macht, dann wird das vom Hauptmodul importiert. Wenn man da in jedem Modul was machen oder importieren muss, ist irgendwas komisch bis falsch.

Re: logging in Klassen oder (Untermodulen) ...

Verfasst: Samstag 20. September 2025, 09:46
von Sirius3
@drnicolas: Beim logging gibt es zwei Ebenen. Auf der einen Seite sind die log-Handler, die definieren, wie und wo etwas ausgegeben wird. Das konfigurierst du einmal in main, indem Du z.B. setup_loghandlers() aus Deinem setup_logger.py aufrufst.
Auf der anderen Seite gibt es logger, die typischerweise für jedes Modul erzeugt werden und Meldungen in das logsystem geben.
Am Anfang von Modulen findet man oft

Code: Alles auswählen

import logging
logger = logging.getLogger(__name__)

Re: logging in Klassen oder (Untermodulen) ...

Verfasst: Dienstag 23. September 2025, 10:27
von drnicolas
Danke. Habe ich umgesetzt und scheint zu funktionieren.