Hallo zusammen,
gibt es eine Möglichkeit, FileLog-Dateien aus FHEM heraus zu editieren, also z.B. Zeilen aus einer Datei zu löschen oder hinzu zu fügen?
(Ich hatte mir gestern einen Berechtigungsfehler eingehandelt, weil ich ausserhalb von FHEM mittels Editor eine FileLog Datei geändert hatte)
Eher nicht ... (reopen,) clear und absorb gibt es zur Manipulation.
Manuelles Editieren ist generell immer etwas "schwierig", da die Datei ja ständig durch FHEM aktualisiert werden könnte - Datenverlust im Grunde vorprogrammiert.
Durch welche (genaue) Aktion wurde der Berechtigungsfehler ausgelöst ? Normalerweise ändern sich beim reinen Editieren die Rechte nicht (z.B. vom Prompt oder via Samba).
Ich habe mir ein bash shell script (ClearLog.sh) gemacht, mit dem ich die ungewünschten Zeilen raus-greppe #!/bin/bash
cat /opt/fhem/log/fhem.log | grep -av "Cannot fork: Cannot allocate memory" | grep -av "error while requesting" > /opt/fhem/log/fhem.txt
cp /opt/fhem/log/fhem.txt /opt/fhem/log/fhem.log
rm /opt/fhem/log/fhem.txt
Zitat von: OdfFhem am 13 November 2022, 10:57:32
Durch welche (genaue) Aktion wurde der Berechtigungsfehler ausgelöst ? Normalerweise ändern sich beim reinen Editieren die Rechte nicht (z.B. vom Prompt oder via Samba).
Ich hatte dazu vohin einen sehr langen Aufsatz getippt und wollte wegen der Fehlersuche hier einen Thread beginnen.
Der DAU sitzt vor dem PC.
Kurz umrissen: meine Logfiles liegen auf einem NAS, welches auf dem Raspi gemountet ist. Klappt seit Jahren ohne Probleme.
Vorgestern hatte ich aus Bequemlichkeit - weil ich grade auf dem NAS-System unterwegs war, einen Schönheitsfehler korrigiert (File Download auf lokales Windows System, Editor, Upload zurück auf NAS).
Das hat natürlich die Benutzerrechte der Datei auf dem NAS geändert.
Zitat von: Dracolein am 13 November 2022, 12:03:13
Das hat natürlich die Benutzerrechte der Datei auf dem NAS geändert.
und eventuell die Zeilenumbrüche, die Zeichencodierung ...
Bei einem Logfile vielleicht egal, bei einer Konfigurationsdatei oder einem Skript kann man damit dem System praktisch ein beliebiges, unvorhersehbares Verhalten entlocken. Also sowas von Linux aus tun.
Genau das hab ich sonst immer gemacht. Lokal auf dem Pi mittels Editor.
Wie gesagt, der DAU.... ::)
Okay, weiß ich bescheid. Ich hatte gehofft, es gäbe einen Workaround, um aus FHEMWEB heraus mittels "edit files" z.B. etwas zu tun.
Zitat von: Jamo am 13 November 2022, 11:18:42
Ich habe mir ein bash shell script (ClearLog.sh) gemacht, mit dem ich die ungewünschten Zeilen raus-greppe #!/bin/bash
cat /opt/fhem/log/fhem.log | grep -av "Cannot fork: Cannot allocate memory" | grep -av "error while requesting" > /opt/fhem/log/fhem.txt
cp /opt/fhem/log/fhem.txt /opt/fhem/log/fhem.log
rm /opt/fhem/log/fhem.txt
Warum so umständlich, wenn es mit "sed -i" besser geht? Wie z.B. (ungetestet!):
sed -i -e "/Cannot fork: Cannot allocate memory/d" -e "/error while requesting/d" /opt/fhem/log/fhem.log
Spart Dir X-Pipes und mehrere Copierforgänge .. ALLERDINGS must Du trotzdem im Fehm ein reopen des Logs durchführen
ZitatWarum so umständlich, wenn es mit "sed -i" besser geht?
Weil ich es bis heute nicht besser wusste.
Danke für den Tip, wird geändert!
OT:
Ich hoffe, ich habe Dein Ziel richtig verstanden und umgesetzt. Deshalb meine Anmerkung: Bitte Testen!
auch OT: warum will man sowas überhaupt tun?
Ein Beispiel hättte ich: In OWTHERM bspw. wird ab und an (hatte ich schon ewig nicht mehr) bei "Problemen" mit einem Sensor der Wert 85 geliefert, den will man dann im FileLog löschen, weil der in einem Plot stört.
ZitatOT:
Ich hoffe, ich habe Dein Ziel richtig verstanden und umgesetzt. Deshalb meine Anmerkung: Bitte Testen!
Getestet und für gut befunden - Ja, ich möchte die ganze Zeile aus dem Filelog löschen.
ZitatWarum möchte man das machen?
Weil man z.B nach dem abspeichern der 99_MyUtils.pm >200 Zeilen mit "...PERL WARNING..." im filelog hat. Da will man nicht immer nach unten scrollen.
Zitat von: Jamo am 13 November 2022, 20:44:12
Weil man z.B nach dem abspeichern der 99_MyUtils.pm >200 Zeilen mit "...PERL WARNING..." im filelog hat. Da will man nicht immer nach unten scrollen.
Man könnte das FileLog auch so anlegen, dass solche Meldungen, die auf Betriebssystemebene auftreten, erst gar nicht im Logfile landen.
Hallo Betateilchen,
kannst Du mir auch noch sagen wie? Ich sehe nur eine reguläre regexp beim Filelog, und das attribut ignoreRegexp
Beim speichern von der 99_MyUtils.pm (das mir die 200 Einträge erzeugt), sehe ich im EventMonitor "global:FILEWRITE../FHEM/99_MyUtils.pm".
Trotz "attr FileLog ignoreRegexp global:FILEWRITE../FHEM/99_MyUtils.pm" werden diese Meldungen trotzdem gelogged. Hast Du einen Tip?
Einfacher Tipp: Dafür sorgen, das Warning nicht auftreten ;)
Es gibt meistens einen Grund für Warning ..... eine Warnung sollte man immer beachten,
Hallo Werniemann,
ich meine diese "redefined" Warnings, die treten auf, sobald ich nur 1 neue Zeile in die 99_MyUtils einfüge. Dann werden alle Subs mit dieser Warnung aufgeführt. Davon bekomme ich mehr als 200 Zeilen. Hast Du das nicht? 2022.11.14 08:47:04 1: PERL WARNING: Subroutine mySubCheck_n redefined at ./FHEM/99_MyUtils.pm line 2793.
2022.11.14 08:47:04 1: PERL WARNING: Subroutine myBriefkastenAliveCheck redefined at ./FHEM/99_MyUtils.pm line 2837.
2022.11.14 08:47:04 1: PERL WARNING: Subroutine myZigBeeReachableCheck redefined at ./FHEM/99_MyUtils.pm line 2849.
2022.11.14 08:47:04 1: PERL WARNING: Subroutine set_AllBlinds2 redefined at ./FHEM/99_MyUtils.pm line 2884.
2022.11.14 08:47:04 1: PERL WARNING: Subroutine set_AllBlinds redefined at ./FHEM/99_MyUtils.pm line 2900.
2022.11.14 08:47:04 1: PERL WARNING: Subroutine Blind_AllUpDnCheck redefined at ./FHEM/99_MyUtils.pm line 2918.
Ach soooo .... die meinst Du .....
Zitat von: Wernieman am 14 November 2022, 11:24:57
Ach soooo .... die meinst Du .....
Das war aber schon länger klar...
Zitat von: Jamo am 13 November 2022, 20:44:12
Weil man z.B nach dem abspeichern der 99_MyUtils.pm >200 Zeilen mit "...PERL WARNING..." im filelog hat.
Zitat von: Jamo am 13 November 2022, 23:17:34
Hallo Betateilchen,
kannst Du mir auch noch sagen wie? Ich sehe nur eine reguläre regexp beim Filelog, und das attribut ignoreRegexp
Alternative 1: Ein FileLog device anlegen, das nicht als fakelog arbeitet, sondern nur tatsächlich gewünschte events aufzeichnet.
Alternative 2: Hast Du mal versucht, "PERL WARNING" in die ignoreRegexp zu schreiben?
Zitat von: TomLee am 13 November 2022, 18:58:46
Ein Beispiel hättte ich: In OWTHERM bspw. wird ab und an (hatte ich schon ewig nicht mehr) bei "Problemen" mit einem Sensor der Wert 85 geliefert, den will man dann im FileLog löschen, weil der in einem Plot stört.
Das kann man auch mit FileLog Bordmitteln (Attribut acceptedRange) lösen.
Dazu muss man nicht im Log rumpfuschen.