Zeilenzähler von Logfile bleibt nach Clear auf 1 stehen

Begonnen von cwagner, 26 Dezember 2024, 12:02:53

Vorheriges Thema - Nächstes Thema

cwagner

Als fauler Hund hatte ich mir einen kleinen Automaten gebastelt, der vom Normal deutlich abweichende Zahl der Einträge des Logfiles aufgrund zum Beispiel eines Fehlers oder Verbindungsabbruch mich informiert. Dann schaue ich gezielt nach.
Nun ist mir aufgefallen, dass der Zeilenzähler (Reading linesInTheFile) auf den mein Automat "schielt" nach einem set Logfile Clear auf 1 stehenbleibt...

Ist nur ein Schönheitsfehler - aber vielleicht hat jemand mit mehr Programmierdurchblick die Idee, wo im Code der Fall "Clear" das Hochzählen der Zeilen blockiert.

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

rudolfkoenig

Ich kann das Problem nicht nachstellen: linesInTheFile wird wg. clear auf 0 gesetzt, und zaehlt danach wie vorher.
Kannst Du bitte fuer das Reproduzieren des Problems eine Anleitung zeigen?

Ich habe den Beitrag von "Frontends/FHEMWEB" nach Automatisierung (Unterforum fuer FileLog) verschoben.

cwagner

Also: Bei Logs von Devices funktioniert es wie erwartet. Ich mach set logfile clear und der Zähler ist auf 0, weil das Log leer ist. Werden Zeilen geschrieben, dann geht der Zähler rauf.

Anders beim Logfile, das bei mir so definiert ist:
defmod Logfile FileLog ./log/fhem-%Y-%W.log Logfile
attr Logfile alias Logfile
attr Logfile nrarchive 3
attr Logfile room System

setstate Logfile active
setstate Logfile 2024-12-27 07:41:07 linesInTheFile 1
Um 7:41 habe ich manuell im Fhemweb ich mit dem Setter set Logfile clear ausgelöst. Das Log wurde geleert und es wurde automatisch und wie ich finde klug 2024-12-27_07:41:07 Logfile clear eingetragen - damit hatte das Logfile 1 Zeile.

Heute habe ich verzweifelt an einem anderen Problem gekaut und deshalb für ein Device auch den Quasselmodus (verbose=5) an, tausende Zeilen - aber der Zähler ist auch jetzt 10 Stunden später immer noch auf 1. Jetzt cleare ich wieder und er bleibt bei 1...

Danke, dass Du mein Thema ernst nimmst

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

rudolfkoenig

Zitatdefmod Logfile FileLog ./log/fhem-%Y-%W.log Logfile
Diese Definition ist nur ein "fake Log", damit man das FHEM-Log in FHEMWEB anzeigen kann.
Das FHEM-Log wird nicht mit den FileLog Routinen geschrieben, und ich wollte fuer die FHEMWEB Anzeige notwendigen Funktionen nicht zweimal implementieren.

Der Zaehler funktioniert auch vor dem clear nicht, weil die Ausgabe nicht ueber das FileLog Modul laeuft.
Aus dem gleichen Grund duerfte auch nrarchive sinnbefreit sein, dafuer sollte man "attr global nrarchive 3" verwenden.

Dass nach "set Logfile clear" ins FHEM-Log "Logfile clear" geschrieben wird, liegt daran, dass jedes set ein Event generiert, und "Logfile clear" das Regexp (Logfile) ausloest, was nicht so beabsichtigt war.
Ich habe das gefixt indem das FileLog ab sofort auf readonly gesetzt wird, falls das Regexp dem Namen des FileLogs entspricht.

cwagner

Vielen Dank für die Infos - nrachive hatte ich auch in global definiert, sodass es mir nicht aufgefallen ist. Warum dann mein "Warner" selten vermeintlich funktioniert hat, wird ein Rätsel des Computers bleiben.

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

betateilchen

Zitat von: rudolfkoenig am 27 Dezember 2024, 18:26:41was nicht so beabsichtigt war.
Ich habe das gefixt

Das finde ich sehr schade, den Eintrag "set Logfile clear" fand ich immer sehr hilfreich, um später noch nachvollziehen zu können, warum im Log nichts drinsteht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Frohes Neues Jahr!

@Rudi: könnte man Dich irgendwie davon überzeugen, die vorgenommene Änderung wieder zurückzubauen? Der Eintrag im Logfile stört doch überhaupt nicht und der Zeilenzähler zeigt mit "1" auch den korrekten Wert an.

Und offenbar bin ich mit meiner Meinung nicht alleine...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Der Zaehler war nur wegen dieser einer Zeile 1, davor und danach falsch.

Angebot:
- die set Funktion in FileLog kriegt am Ende eine passende Log Zeile, damit wird das Gleiche nicht als Event von diesem FileLog geschrieben, sondern ueber das Log Mechanismus. Duerfte im Endeffekt keinen Unterschied machen.
- bei readonly FileLogs wird linesInTeFile nicht gesetzt.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig