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:
- estehende Logdatei mit dem aktuellen Zeitstempel in das Backup-Verzeichnis kopieren
- neue leere efa.log Datei anlegen.
- 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.
- 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