Netzwerk-Unterbrechung und Schreib-Zugriffe auf eine Log-Datei
Verfasst: Freitag 13. Oktober 2023, 14:27
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
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