python script zum filtern von logfiles

Begonnen von Rainerlan_2, 13 Januar 2022, 23:22:39

Vorheriges Thema - Nächstes Thema

Rainerlan_2

Vielleicht hatte schon jemand das Problem - und vlt. gibt es auch schon irgendwo ein Skript dazu (ich habe es dann aber nicht gefunden):
Es existieren große logfiles und nun möchte man diese auf wenige Readings maximal zusammenschrumpfen.
Das war bei mir der Fall, da ich noch von der Zeit bevor ich in mySQL geloggt habe, parallel filelog-devices definiert hatte.
Jetzt wollte ich die alten, großen logs aber nicht einfach löschen, sondern ausgewählte Events ins DbLog übernehmen mittels
set filelogconv import2DbLog

Daher habe ich ein kleines Python-skript geschrieben, mit folgenden Filterfunktionen:

  • Nur Events mit sich ändernden Readings werden im Output übernommen (Nicht konfigurierbar)
  • Man kann Entweder Readings definieren die NICHT ausgefiltert werden sollen (alles andere wird ausgefiltert) - via option "-keep" & "keepReadingsList[]"
  • Man kann Readings definieren die ausgefiltert werden sollen (alles andere wird NICHT ausgefiltert) - via "skipReadingsList[]"
  • Man kann komplette Zeilen mittels Regex ausfiltern (skipRegexList)
  • man kann beim filtern von Zahlenwerten einen Änderungsthreshold definieren (deltaDict)

Um nur den Status des devices zu behalten, muss man mit einem Schlüsselwort arbeiten:
keepReadingsList = ['__status__']

Das Skript unterstützt aktuell 1 Device pro logfile - wäre aber recht einfach zu erweitern. Nur habe ich die Anforderung selbst nicht an das Skript.

Aufruf:
fhemLogFilter_v1_0.py [-keep] -i <inputfile> -o <outputfile>

Vielleicht kanns jemand brauchen.
Bei den von mir getesteten Logs hats funktioniert...Aber keine Garantie dass das bei allen so ist;)