Netzwerk-Unterbrechung und Schreib-Zugriffe auf eine Log-Datei

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
WebDepp63
User
Beiträge: 13
Registriert: Mittwoch 16. August 2023, 10:40

Hallo in die Runde,

ich habe eine Windows-Anwendung die mit Netzwerkunterbrechungen zurechtkommen muss. Die Daten für die Anwendung stehen in einer Access-DB (Klar gesagt: Access ist nicht meine erste Wahl aber die des Kunden!!!) auf einem (File-)Server zur Verfügung. Die Verbindung zu dieser Access-DB läuft über ein VPN. Parallel zur eigentlichen Entwicklung habe ich eine kleine Testanwendung zum Testen eines DB-Layers, der die Datenbankzugriffe inklusive der Netzwerk-Unterbrechungen handlen soll erstellt. Außerdem protokolliert dieses Testprogramm alle DB-Operationen. Die Testanwendung wählt kontinuierlich und fortlaufend aus der Datenbank aus den vorhandenen Tabellen zufällig immer wieder eine aus und stellt die Daten in einem TableView dar. Die DB-Operationen werden in einem Log-File protokolliert. Das Log-File liegt lokal auf dem Client, also parallel zur Testanwendung. Die Netzwerkunterbrechungen simuliere ich hart indem ich einfach das Netzwerkkabel ziehe. Die ANwendung fängt soweit alles ab und sobald ich das Kabel wieder einstecke arbeite die Anwendung weiter wie gewollt.

Das eigentliche Problem ist die Log-File-Protokollierung. Ich könnte jetzt sagen, pfeif drauf, der Rest läuft ja aber verstehen würde ich es doch gerne. Zunächst hatte ich das Modul logging verwendet, das hat nicht funktioniert. Ich habe deshalb eine eigene Log-File-Routine geschrieben, so dass sich das ganze jetzt folgendermaßen verhält: Das Programm startet und fängt an die DB-Operationen auszuführen. Dabei werden alle DB-Operation im Log-File protokolliert. Dann ziehe ich den Netzwerk-Stecker, das Programm unterbricht die DB-Operationen. Sobald ich den Stecker wieder verbinde setzt das Programm seine Arbeit fort. ALLERDINGS wird mit der Netzwerk-Unterbrechung auch die lokale Protokollierung im Log-File unterbrochen, und es wird gemeldet: [Errno 2] No such file or directory: '_LOGGING.LOG' Wie kann das sein, dass die lokalen Dateioperationen durch die Netzwerkunterbrechung auch blockiert werden. Ich fange das mit try...except ab. Und gebe in diesem Fall statt in der Datei, auf der Konsole aus. MEINE Fehlermeldungen sind dann inkl. {e}:
[ LOGGING ] Datei '_LOGGING.LOG' konnte nicht geöffnet ( FILE-OPEN ) werden: [Errno 2] No such file or directory: '_LOGGING.LOG'
[ LOGGING ] Datei '_LOGGING.LOG' konnte nicht geschrieben ( FILE-WRITE ) werden: cannot access local variable 'Datei' where it is not associated with a value
[ LOGGING ] Datei '_LOGGING.LOG' konnte nicht geschlossen ( FILE-CLOSE ) werden: cannot access local variable 'Datei' where it is not associated with a value

Warum meine Log-File-Variable aufgelöst? Wie verhält sich Python an dieser Stelle bzw. was habe ich übersehen?
Sobald das Kabel wieder eingesteckt ist, wird auch das Logfile weitergeschrieben. Da stehe ich gerade wirklich etwas auf dem Schlauch. Was übersehen ich?
Die im Log-File protokollierten Unterbechungen wären natürlich für mich wichtig.

Ich danke euch für eure Antworten!

Viele Grüße
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Gerade bei mir getestet: ich kann (wie erwartet) lokale Dateien schreiben, egal ob Netzwerk da ist oder nicht.

Also muß Dein Pfad zur Logdatei irgendwie über Netzwerk laufen. Ohne zu wissen, was Du konkret machst, kann man natürlich nichts sagen.

Anderer Punkt: wenn logging nicht funktioniert hat, dann solltest Du dieses Problem lösen, statt ein eigenes Logging zu schreiben. Was hat denn nicht funktioniert?
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@WebDepp63: Ich würde mich der Empfehlung anschliessen kein eigenes Logging zu implementieren. Selbst wenn einem `logging` aus Gründen nicht ausreicht, würde ich erst einmal schauen was es da sonst noch so gibt. Ich benutze beispielsweise gerne `loguru`. Andere Anforderungen können so etwas wie `structlog` sinnvoll machen.

Was bei Deinem Logging ”fehlt” ist bei Ausnahmen die konkrete Ausnahme. So wie es jetzt ist muss man wissen das die beiden letzten Einträge `UnboundLocal`-Ausnahmen sind. Wäre schön wenn das auch im Protokoll stünde. Und die wäre logisch wenn Du bei der ersten Ausnahme protokollierst und dann einfach so weitermachst als wäre alles in Ordnung. Das ist natürlich keine sinnvolle Ausnahmebehandlung. Wenn die Datei nicht geöffnet werden konnte, dann sollte Code der die nicht geöffnete Datei dann benutzt, gar nicht erst ausgeführt werden, denn das *kann* ja gar nicht funktionieren etwas in eine Datei zu schreiben die gar nicht geöffnet ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
WebDepp63
User
Beiträge: 13
Registriert: Mittwoch 16. August 2023, 10:40

Danke euch für die Antwort. In der Tat, war mein Fehler, habe vor lauter Bäumen den Wald nicht mehr gesehen. Ich hatte das Projekt mehrfach umkopiert und sieh da, der letzte Pfad liegt auf einem Netzlaufwerk. Nicht das der Access-DB, aber auch ein Netzlaufwerk. Das rückstellen auf 'logging' versteht sich. Also danke nochmal.

Nur noch eine abschließende Frage zum Forum: Wie kann ich ein abgeschlossenes Thema schließen oder zu mindest als gelöst markieren oder geht das hier gar nicht?

LG
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

So eine Funktion gibt es hier nicht.
Antworten