FileLog: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Mehrere Werte und Dummy in einer Zeile loggen hinzugefügt)
K (Überarbeitung zu "fakelog"; Parameter "readonly" separat erwähnt)
Zeile 12: Zeile 12:
== Definition ==
== Definition ==
Details in der {{Link2CmdRef|Anker=FileLogdefine}}.
Details in der {{Link2CmdRef|Anker=FileLogdefine}}.
Seit März 2015 wird der zusätzliche (optionale) Parameter '''''readonly''''' unterstützt. Dieser kann beispielsweise verwendet werden, wenn (Log-)Dateien zur Anzeige in FHEM eingebunden werden sollen, auf die FHEM keinen Schreibzugriff hat (weil sie z.B. nicht von FHEM geschrieben werden). Siehe hierzu auch {{Link2Forum|Topic=124167|LinkText=dieses Forenthema}}. 


== Attribute ==
== Attribute ==
Zeile 20: Zeile 22:
eine Attributdefinition, die das ermöglicht.
eine Attributdefinition, die das ermöglicht.


Dies bezieht sich aber nur auf normale FileLog-Instanzen. Falls Events aus dem globalen FHEM-Logfile ausgeschlossen werden sollen, muss man das Attribut in '''global''' angeben. (Zusammenhang siehe [[#Globale Logdatei und "fakelog"|Globale Logdatei und "fakelog"]])  
Dies bezieht sich aber nur auf normale FileLog-Instanzen. Falls Events aus dem globalen FHEM-Logfile ausgeschlossen werden sollen, muss man das Attribut in '''global''' angeben. (Zusammenhang siehe [[#Globale Logdatei]])  
:<code>attr global ignoreRegexp .*AbCd.*|.*CdEf.*</code>
:<code>attr global ignoreRegexp .*AbCd.*|.*CdEf.*</code>


Zeile 28: Zeile 30:
Sofern eine Instanz vom Objekt [[eventTypes]] angelegt ist, bietet die Detailansicht eines FileLog eine komfortable Möglichkeit, die regulären Ausdrücke für den/die Filter zu bearbeiten. Siehe hierzu auch diesen {{Link2Forum|Topic=12557|Message=75436}}.
Sofern eine Instanz vom Objekt [[eventTypes]] angelegt ist, bietet die Detailansicht eines FileLog eine komfortable Möglichkeit, die regulären Ausdrücke für den/die Filter zu bearbeiten. Siehe hierzu auch diesen {{Link2Forum|Topic=12557|Message=75436}}.


 
== Globale Logdatei ==
== Globale Logdatei und "fakelog" ==
Die globale Logdatei (üblicherweise als fhem.log bezeichnet) für FHEM wird mit dem Attribut  
Die globale Logdatei (üblicherweise als fhem.log bezeichnet) für FHEM wird mit dem Attribut  
:<code>attr global logfile XXX</code>
:<code>attr global logfile XXX</code>
für das ''global''-Objekt definiert, wobei für ''XXX'' normalerweise <code>./log/fhem-%Y-%m.log</code> verwendet wird.
für das ''global''-Objekt definiert, wobei für ''XXX'' normalerweise <code>./log/fhem-%Y-%m.log</code> verwendet wird.
 
{{Randnotiz|RNTyp=y|RNText=Bis August 2021 war die Spezifikation von '''fakelog''' erforderlich bzw. möglich, um die Sonderbehandlung für diese Logdatei zu unterstützen. Mittlerweile ist das nicht mehr nötig und es wird (auch in der Beispielkonfiguration) der Wert '''Logfile''' empfohlen.}}
Um das ''fhem.log'' über das [[FHEMWEB|Web Interface]] anzeigen zu können, ist ein weiterer Eintrag in der [[Konfiguration]] erforderlich, nämlich:
Um das ''fhem.log'' über das [[FHEMWEB|Web Interface]] anzeigen zu können, ist ein weiterer Eintrag in der [[Konfiguration]] erforderlich, nämlich:
:<code>define Logfile FileLog XXX fakelog</code>
:<code>define Logfile FileLog XXX <strike>fakelog</strike> Logfile</code>
Das ''XXX'' muss '''zwingend''' durch den gleichen Wert ersetzt werden, wie in der Definition des globalen ''logfile'' Attributs, weil anderenfalls unterschiedliche Dateien verwendet werden - mit dem Effekt, dass die über das Web Interface angezeigte Datei nicht die erwarteten Einträge enthält (Details dazu auch in diesem {{Link2Forum|Topic=40041|Message=323315|LinkText=Forenbeitrag}}).
Das ''XXX'' muss '''zwingend''' durch den gleichen Wert ersetzt werden, wie in der Definition des globalen ''logfile'' Attributs, weil anderenfalls unterschiedliche Dateien verwendet werden - mit dem Effekt, dass die über das Web Interface angezeigte Datei nicht die erwarteten Einträge enthält (Details dazu auch in diesem {{Link2Forum|Topic=40041|Message=323315|LinkText=Forenbeitrag}}).


== Werte auslesen ==
== Werte auslesen ==
Manchmal möchte man Daten aus den Logs abrufen ohne händisch in den Logfiles herumzuwühlen. Dies ist insb. auch dann hilfreich, wenn man eigenen Funktionen, Notifys oder spezielle Plots entwirft, bei denen man auf Logdaten zugreifen möchte.
Manchmal möchte man Daten aus den Logs abrufen, ohne händisch in den Logfiles herumzuwühlen. Dies ist insbesondere auch dann hilfreich, wenn man eigene Funktionen, Notifys oder spezielle Plots entwirft, bei denen man auf Logdaten zugreifen möchte.


Grundsätzlich beschrieben ist dies in der {{Link2CmdRef|Lang=de|Anker=FileLog}} und unterscheidet sich minimal (aber entscheidend) von der Struktur bei [[DbLog#Werte_auslesen|DbLogs]].
Grundsätzlich beschrieben ist dies in der {{Link2CmdRef|Lang=de|Anker=FileLog}} und unterscheidet sich minimal (aber entscheidend) von der Struktur bei [[DbLog#Werte_auslesen|DbLogs]].
Zeile 61: Zeile 62:
== Links ==
== Links ==
* {{Link2Forum|Topic=40041|Message=323315|LinkText=Forenbeitrag}} zum Thema fhem.log / fakelog
* {{Link2Forum|Topic=40041|Message=323315|LinkText=Forenbeitrag}} zum Thema fhem.log / fakelog
* Forenthema zum {{Link2Forum|Topic=124167|LinkText="Deprecate" von ''fakelog''}}


[[Kategorie:Logging]]
[[Kategorie:Logging]]

Version vom 21. November 2021, 12:15 Uhr

FileLog
Zweck / Funktion
Protokollierung von Fhem-Ereignissen
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Support (Forum) Automatisierung
Modulname 92_FileLog.pm
Ersteller rudolfkoenig (Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Das Modul FileLog dient zur Protokollierung von Ereignissen in FHEM. Die Einträge werden in eine einfache Textdatei geschrieben. Zur Protokollierung in eine Datenbank kann alternativ oder auch parallel das Modul DbLog verwendet werden.

Logdateien sind die Basis für die Erstellung von Diagrammen (SVG).

Definition

Details in der commandref/FileLogdefine.

Seit März 2015 wird der zusätzliche (optionale) Parameter readonly unterstützt. Dieser kann beispielsweise verwendet werden, wenn (Log-)Dateien zur Anzeige in FHEM eingebunden werden sollen, auf die FHEM keinen Schreibzugriff hat (weil sie z.B. nicht von FHEM geschrieben werden). Siehe hierzu auch dieses Forenthema.

Attribute

Über Attribute lässt sich unter anderem auch festlegen, wie die Archivierung von Logdateien durchgeführt werden soll (Archivierungsbefehl, -pfad sowie Anzahl von Archivgenerationen).

Wenn bestimmte Zeilen nicht in die Logdatei geschrieben werden sollen, ist das Attribut ignoreRegexp hilfreich. Wenn beispielsweise alle Zeilen, die die Zeichenfolge "AbCd" oder "CdEf" enthalten nicht geloggt werden sollen, dann wäre

attr <log-name> ignoreRegexp .*AbCd.*|.*CdEf.*

eine Attributdefinition, die das ermöglicht.

Dies bezieht sich aber nur auf normale FileLog-Instanzen. Falls Events aus dem globalen FHEM-Logfile ausgeschlossen werden sollen, muss man das Attribut in global angeben. (Zusammenhang siehe #Globale Logdatei)

attr global ignoreRegexp .*AbCd.*|.*CdEf.*

Funktionen

FileLog bietet Funktionen wie reopen, absorb und get. Details dazu sind in der commandref/FileLogset zu finden.

Sofern eine Instanz vom Objekt eventTypes angelegt ist, bietet die Detailansicht eines FileLog eine komfortable Möglichkeit, die regulären Ausdrücke für den/die Filter zu bearbeiten. Siehe hierzu auch diesen Beitrag.

Globale Logdatei

Die globale Logdatei (üblicherweise als fhem.log bezeichnet) für FHEM wird mit dem Attribut

attr global logfile XXX

für das global-Objekt definiert, wobei für XXX normalerweise ./log/fhem-%Y-%m.log verwendet wird.

Emblem-question-yellow.svgBis August 2021 war die Spezifikation von fakelog erforderlich bzw. möglich, um die Sonderbehandlung für diese Logdatei zu unterstützen. Mittlerweile ist das nicht mehr nötig und es wird (auch in der Beispielkonfiguration) der Wert Logfile empfohlen.

Um das fhem.log über das Web Interface anzeigen zu können, ist ein weiterer Eintrag in der Konfiguration erforderlich, nämlich:

define Logfile FileLog XXX fakelog Logfile

Das XXX muss zwingend durch den gleichen Wert ersetzt werden, wie in der Definition des globalen logfile Attributs, weil anderenfalls unterschiedliche Dateien verwendet werden - mit dem Effekt, dass die über das Web Interface angezeigte Datei nicht die erwarteten Einträge enthält (Details dazu auch in diesem Forenbeitrag).

Werte auslesen

Manchmal möchte man Daten aus den Logs abrufen, ohne händisch in den Logfiles herumzuwühlen. Dies ist insbesondere auch dann hilfreich, wenn man eigene Funktionen, Notifys oder spezielle Plots entwirft, bei denen man auf Logdaten zugreifen möchte.

Grundsätzlich beschrieben ist dies in der commandref/FileLog und unterscheidet sich minimal (aber entscheidend) von der Struktur bei DbLogs.

Hier ein paar Beispiele, was man damit anstellen kann:

  • get FileLog_FHT_3a32 - - 2016-10-01 2016-10-03 alle Einträge des FileLog_FHT_3a32 vom 01.10.-03.10.2016
  • get FileLog_FHT_3a32 - - 2016-10-01_08:00:00 2016-10-01_16:00:00 alle Einträge des FileLog_FHT_3a32 von 8-16 Uhr am 01.10.2016
  • get FileLog_FHT_3a32 - - 2016-10-01_08:00:00 2016-10-01_16:00:00 4:measured:0: nur die Temperatur-Werte
  • { ReadingsTimestamp("FHT_3a32","state","0") } Timestamp des aktuellen state des FHT_3a32
  • { OldTimestamp("FHT_3a32") } Timestamp des letzten state des FHT_3a32
  • { time_str2num(OldTimestamp("FHT_3a32")) } Timestamp in Sekunden des letzten state des FHT_3a32
  • ...

Weitere Beispiele kann man sich gut aus den SVG-Dateien ziehen.

Mehrere Werte und Dummy in einer Zeile formatiert in Logdatei schreiben

Manchmal möchte man die einzelnen Werte nicht untereinander in der Logdatei haben, sondern wie bei einer CSV-Datei in einer Zeile.

Hierzu kann man wie im Beispiel die einzelnen Readings Kesseltemperatur, Vorlauftemperatur und Rücklauftemperatur aus One-Wire-Sensoren DS18B20 und die Außentemperatur als vierten Wert aus einem Dummy über sprintf formatieren. Wer das mit Kommas oder Semikolons getrennt haben möchte, ersetzt die Leerzeichen zwischen den einzelnen Werten durch sein Wunschtrennzeichen.

attr HEIZUNG userReadings HeizDataLog {sprintf("K: %3.1f VL: %3.1f RL: %3.1f Pr: %4.1f", ReadingsVal("OWX_28_4C966XXXXXXX","temperature", 0),ReadingsVal("OWX_28_4F9XXXXXXXXX","temperature", 0),ReadingsVal("OWX_28_FFAXXXXXXXXX","temperature", 0), (Value("Heiz_Temp_Outside")))}

Für die einzelnen Userreadings lassen sich auch unterschiedliche Intervalle angeben.

attr HEIZUNG event-min-interval HeizDataLog:300, HeizKesselTemp:20

Da im Beispiel nur Userreadings HeizDataLog geschreiben werden soll, muss es bei <regexp> dementsprechend angegeben werden.

# logging

define FileLog_Heizung FileLog ./log/Heizung/Heizung_%Y_%m.log HEIZUNG:HeizDataLog.*

attr FileLog_Heizung logtype text

attr FileLog_Heizung room LogFiles,Heizung

attr FileLog_Heizung group Heizung

Das ergibt folgendes Ergebnis:

2020-09-27_19:36:57 HEIZUNG HeizDataLog: K: 66.8 VL: 60.8 RL: 35.7 Out: 18.4

2020-09-27_19:41:58 HEIZUNG HeizDataLog: K: 60.0 VL: 56.9 RL: 34.3 Out: 18.3

2020-09-27_19:46:58 HEIZUNG HeizDataLog: K: 50.2 VL: 47.9 RL: 34.4 Out: 18.2

Links