logging in einem Klassenmodul ...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
drnicolas
User
Beiträge: 118
Registriert: Sonntag 24. Juli 2016, 10:32

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?
Benutzeravatar
__blackjack__
User
Beiträge: 14192
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Every thinking person fears nuclear war and every technological nation plans for it. Everyone knows
it's madness, and every country has an excuse.” — Carl Sagan, Cosmos, Episode 13: Who Speaks for Earth?
Sirius3
User
Beiträge: 18311
Registriert: Sonntag 21. Oktober 2012, 17:20

@drnicolas: vor einem Monat waren wir doch schonmal hier: viewtopic.php?p=435249#p435249
Warum importierst Du jetzt wieder mainlogger überall?
drnicolas
User
Beiträge: 118
Registriert: Sonntag 24. Juli 2016, 10:32

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?
Sirius3
User
Beiträge: 18311
Registriert: Sonntag 21. Oktober 2012, 17:20

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
Antworten