Seite 1 von 1

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

Verfasst: Sa 5. Sep 2020, 12:49
von florian
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

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

Verfasst: Mi 9. Sep 2020, 19:55
von florian
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

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

Verfasst: Do 10. Sep 2020, 00:33
von thomasp
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.

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

Verfasst: Mi 16. Sep 2020, 19:46
von florian
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

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

Verfasst: So 1. Nov 2020, 21:52
von smg
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

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

Verfasst: So 15. Nov 2020, 13:43
von smg
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

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

Verfasst: Mo 23. Nov 2020, 20:57
von thomasp
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).

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

Verfasst: Sa 11. Nov 2023, 12:00
von smg
Hallo,

Behoben in EFA 2.3.3.
Logfiles können nun bis zu 10 MByte groß werden.

Nur noch efaBase und efaBths dürfen ein Logrotate durchführen.
Damit sollte das Problem behoben sein.

Gruß
Stefan