Nach Neuanlegen des Logfiles fehlen Einträge für "efaBths" bis zum Neustart von efa

Einen Fehler in efa2 melden

Moderator: nick

Forumsregeln
Beim Melden eines Fehlers, gib bitte die verwendete efa2-Version und Dein Betriebssystem an, sowie eine genaue Beschreibung der Fehlersituation und ggf. der Fehlermeldungen.
Antworten
florian
Beiträge: 96
Registriert: Do 2. Dez 2010, 21:35

Nach Neuanlegen des Logfiles fehlen Einträge für "efaBths" bis zum Neustart von efa

Beitrag von florian » Sa 5. Sep 2020, 12:49

Hallo,

Situation: das Logfile wird automatisch neu angelegt (scheinbar wenn die Größe 1 MB überschreitet), z.B. Info im Logfile:
[01.09.2020 22:20:02] - efaCLI - 15807 - INFO - EVT035 - Alte Logdatei wurde nach '/home/efa/efa2/backup/efa.log20200901_222002' verschoben.
Bis zum Neustart von efa werden keine "efaBths" Einträge geloggt (z.B. Fahrtbeginn, Fahrtende, efaRemote logins), es tauchen nur Einträge für "efaCLI" (z.B. für Backups) auf. Der Neustart von efa erfolgt ein Mal täglich, danach werden wieder alle Einträge korrekt im Logfile eingetragen.

Version efa: 2.2.2_48 -- Java: 1.8.0_191 (JVM 25.191-b12) -- OS: Linux 4.15.0-109-generic
Nach Durchsicht alter Logfiles existiert dieser Fehler schon mindestens seit Version 2.2.2_22, ältere Logfiles habe ich nicht gefunden.

Vielleicht wäre es auch sinnvoll, das Logfile täglich mit dem Neustart von efa neu anzulegen, das würde auch das Backup des Logfiles erleichtern.

Viele Grüße
Florian

florian
Beiträge: 96
Registriert: Do 2. Dez 2010, 21:35

Re: Nach Neuanlegen des Logfiles fehlen Einträge für "efaBths" bis zum Neustart von efa

Beitrag von florian » Mi 9. Sep 2020, 19:55

Hallo,

ich habe versucht, den Fehler weiter zu lokalisieren. Ergänzung zur ersten Fehlerbeschreibung unter Linux: es läuft ein cronjob, der regelmäßig über efaCLI ein Backup des Projekts erstellt. Wenn beim efaCLI-Aufruf das Logfile größer als 1 MB ist, wird ein neues Logfile erstellt (mit der Meldung wie im ersten Beitrag), aber es werden bis zum täglichen Neustart von efa eben nur die efaCLI-Meldungen im Logfile eingetragen.

Bei meiner efa-Installation unter Windows habe ich die Situation nachgestellt, indem ich alle 5 Minuten (damit sich das Logfile schnell füllt) über eine zeitgesteuerte Aufgabe mit Aufruf von efaCLI ein Backup erstellen lasse. Hier ist das Verhalten allerdings ein anderes als unter Linux:
  • bei Größe Logfile > 1 MB und efaCLI-Aufruf für Backup: das Logfile wird in das backup-Verzeichnis kopiert, es wird aber kein neues Logfile angelegt (also wird ab Überschreiten der 1 MB bei jedem Aufruf von efaCLI eine neue Kopie angelegt)
  • Erst beim Neustart von efa (automatischer täglicher Neustart ober auch manuelles Beenden und Neustarten) wird ein neues Logfile angelegt (wenn es größer als 1 MB ist)
  • Es werden auch die efaBths Meldungen geloggt
Version efa: 2.2.2_48 -- Java: 1.8.0_261 (JVM 25.261-b12) -- OS: Windows 10 10.0

Kann jemand diese Verhaltensweisen bestätigen? Das beschriebene Verhalten unter Linux finde ich schon kritisch, da für einen Zeitraum (bis zum täglichen efa-Neustart) die efaBths-Meldungen fehlen.

Nick, wäre gut wenn du was dazu sagst wenn du hier mal wieder reinguckst.

Viele Grüße
Florian

thomasp
Beiträge: 19
Registriert: Sa 14. Feb 2015, 15:59
Wohnort: Fleckeby, S-H
Kontaktdaten:

Re: Nach Neuanlegen des Logfiles fehlen Einträge für "efaBths" bis zum Neustart von efa

Beitrag von thomasp » Do 10. Sep 2020, 00:33

Ich kann das bestätigen. Wir haben zwar die Logfiles nicht länger auf, aber die paar reichen um es festzustellen. Es laufen reichlich efaCLI jobs (via cron).

Nach Wechsel des Logfiles ist die erste efaBths Meldung die vom automatischen Neustart um 05:00 (bei uns). Davor kommen nur efaCLI Meldungen. Es fehlen alle efBths Meldungen wie z.B. RMT003 (efaCLI connect), Fahrtenbucheintragungen, und die Meldungen bei automatischem Ende (vor Neustart) EVT031, EVT004 usw.. Erst nach dem Neustart ist EFA-Bootshaus offenbar wieder fähig, erfolgreich in das Logfile zu schreiben.

Platform Raspberry PI 2B mit Raspbian 10 (Buster).
Version efa: 2.2.2_48 -- Java: 11.0.7 (JVM 11.0.7+10-post-Raspbian-3deb10u1) -- OS: Linux 5.4.51-v7+
Eine laufende MSWindows-Version haben wir nicht.
Thomas
DRC Domschulruderclub Schleswig
efa2 auf Raspberry Pi 2/3 - Raspbian - Openbox

florian
Beiträge: 96
Registriert: Do 2. Dez 2010, 21:35

Re: Nach Neuanlegen des Logfiles fehlen Einträge für "efaBths" bis zum Neustart von efa

Beitrag von florian » Mi 16. Sep 2020, 19:46

Nochmal zusammengefasst: Wenn beim Aufruf von efaCLI das Logfile > 1 MB ist, wird ein Neues angelegt und erst ab dem Neustart von efaBths (automatisch täglich) werden auch die efaBths-Meldungen wieder im Logfile gespeichert.

Ich habe als Workaround für die Backups statt efaCLI die "Automatischen Abläufe" in efa benutzt, http://efa.nmichael.de/dokuwiki/doku.php?id=config_cron. Ich musste dafür die Verarbeitung via cronjobs und Skript anpassen, um das efa-Backup umzubenennen und auf den Backup-Server hochzuladen.

Jetzt landen wieder alle Meldungen im Logfile und dieses wird erst neu angelegt, wenn beim täglichen Neustart die Größe > 1 MB ist (so scheint es).

Es wäre trotzdem gut, wenn der Fehler behoben wird, eine schnelle Lösung wäre vielleicht nur beim Start von efaBths (und nicht bei efaCLI) die Größenüberprüfung des Logfiles zu machen?

Viele Grüße
Florian

smg
Beiträge: 10
Registriert: Di 28. Mai 2019, 23:34

Re: Nach Neuanlegen des Logfiles fehlen Einträge für "efaBths" bis zum Neustart von efa

Beitrag von smg » So 1. Nov 2020, 21:52

Hallo,

habe hierzu einen Issue bei GitHub angelegt: https://github.com/nicmichael/efa/issues/22

Es wäre noch fraglich, ob in den hier beschriebenen Fehlerszenarien das Bootshaus-Programm die Logeinträge in die Logdatei im Backupverzeichis weiterschreibt. Unter Linux würde ich das für möglich halten.
Es wäre trotzdem gut, wenn der Fehler behoben wird, eine schnelle Lösung wäre vielleicht nur beim Start von efaBths (und nicht bei efaCLI) die Größenüberprüfung des Logfiles zu machen?
Ja, das wäre vielleicht eine schnelle Lösung, die ich jetzt umgesetzt, aber noch nicht getestet habe.
Ich bin etwas argwöhnisch, wenn zwei Programme zeitgleich in eine Logdatei schreiben wollen. Das wäre hier aber zwangsläufig der Fall.

Gruß,
Stefan

smg
Beiträge: 10
Registriert: Di 28. Mai 2019, 23:34

Re: Nach Neuanlegen des Logfiles fehlen Einträge für "efaBths" bis zum Neustart von efa

Beitrag von smg » So 15. Nov 2020, 13:43

Hallo,

das Verhalten des Loggers ist derzeit wie folgt:

Wird das Programm (egal welches aus dem EFA-Portfolio) gestartet, und das Logfile hat eine Dateigröße >1M, dann führt das jeweils aktive Programm ein Logrotate durch:
  1. estehende Logdatei mit dem aktuellen Zeitstempel in das Backup-Verzeichnis kopieren
  2. neue leere efa.log Datei anlegen.
  3. Erstellen von Logeinträgen verhindern, wenn die Log-Datei mehr als 10 MByte umfasst.
    Dies kann für größere Bootshäuser schon ein Problem sein, da die EFACLI-Ausgaben alle in die efa.log ausgegeben werden. Bei einem "boats list" Kommando schwillt die Logdatei schon mal schnell an.
  4. Das parallele Erstellen von Logeinträgen durch mehrere Programme in eine Logdatei scheint kein Problem zu sein.
Dabei ist das resultierende Verhalten für das Logrotate unter Windows und Linux unterschiedlich.

Windows
  • die aktuelle Logdatei wird immer in das Backup-Verzeichnis kopiert.
  • das Neuanlegen der efa.log scheitert, sofern mindestens ein weiteres Programm auf die efa.log zugreift. Dies kann sowohl ein "ls" aus unixutils sein, oder das parallel geöffnete efabths, wenn efacli läuft - oder ein efacli, das gerade läuft, während efabths die Logrotation durchführen will.
  • scheitert das Neuanlegen der efa.log, wird einfach in die bestehende efa.log weiter geschrieben. Somit gehen unter Windows zumindest keine Logeinträge verloren, sofern die Logdatei die Größe von 10 MByte nicht überschreitet.
Linux
  • die aktuelle Logdatei wird immer in das Backup-Verzeichnis kopiert.
  • das Neuanlegen der efa.log scheitert unter Linux (raspian, ext3/ext4) nie. Die efa.log wird neu erstellt. Alle anderen Programme, die die efa.log noch offen haben, schreiben so lange dahinein, bis sie beendet sind.
  • Allerdings sind diese Einträge aus den anderen Programmen weg, sobald das letzte Programm die Datei geschlossen hat. Letztlich ist es unter Linux möglich, dass Programme auch dann noch in Dateien schreiben können, wenn sie durch ein anderes gelöscht wurden.
Unter Raspian gehen somit definitiv Logeinträge verloren, wenn bootshaus läuft, die Logdatei größer als 1 MByte ist, und ein anderes efa-Programm ein Logrotate durchführen möchte.

Nach meinen Tests würde es tatsächlich helfen, wenn nur efabootshaus das Logrotate durchführt.

Dann schreiben einfach andere efa-Programme in die vorhandene Datei. Man muss dann nur noch dafür sorgen, dass während des Startvorgangs von efabootshaus kein anderes efa-Programm läuft (da dann unter Linux dessen Logeinträge verloren gehen).

Zusätzlich sollte EFA Bootshaus erst bei einer Logdatei-Größe von 10 MByte eine Rotation durchführen (und diese nur beim Start).
Efa wird aufgrund interner Logik damit auch erst bei einer Logdatei-Größe von 100 MByte das Logging einstellen.

Gruß,
Stefan

thomasp
Beiträge: 19
Registriert: Sa 14. Feb 2015, 15:59
Wohnort: Fleckeby, S-H
Kontaktdaten:

Re: Nach Neuanlegen des Logfiles fehlen Einträge für "efaBths" bis zum Neustart von efa

Beitrag von thomasp » Mo 23. Nov 2020, 20:57

efaCLI - efaBths ist ja eine client-server Beziehung. Von daher würde ich erwarten, dass efaCLI auch nicht selbst ins Log schreibt, sondern einen log-Request an efaBths schickt. Damit wäre das sowieso problematische konkurrierende Schreiben erledigt und efaBths Herr des Logs.
Bei efa-remote könnte man noch ein lokales Logging überlegen, es aber auch sein lassen (lieber die Geschwätzigkeit von efaCLI aufs Wesentliche reduzieren).
Thomas
DRC Domschulruderclub Schleswig
efa2 auf Raspberry Pi 2/3 - Raspbian - Openbox

Antworten