smarthomeNG / smarthome

Device integration platform for your smart home
https://www.smarthomeNG.de
GNU General Public License v3.0
122 stars 91 forks source link

lib.log: introduce mapping and cache possibilites for memory logs #606

Closed onkelandy closed 11 months ago

msinn commented 11 months ago

Das Verzeichnis ../var/cache ist nur zur Ablage von Item Daten gedacht, bei denen das cache Attribut gesetzt ist. Log Informationen bitte woanders ablegen (z.B. in einem cache Unterverzeichnis von ../var/.log

Wozu sollen

        year = datetime.datetime.now().strftime("%Y")
        month = datetime.datetime.now().strftime("%m")
        day = datetime.datetime.now().strftime("%d")
        hour = datetime.datetime.now().strftime("%H")
        stamp = datetime.datetime.now().timestamp()

im ShngTimedRotatingFileHandler dienen? Der ShngTimedRotatingFileHandler ist ein 1-zu-1 Ersatz für den Standard TimedRotatingFileHandler, nur dass .log als Extension verwendet wird.

onkelandy commented 11 months ago

Ich habe hier versucht, operationlog und memlog in den Core zu bringen, weil durch log_text, etc. schon sehr viel möglich ist, was die Plugins fast obsolet macht. operationlog speichert seit jeher den Cache ins Cache Verzeichnis (self._cachefile = self.get_sh()._cache_dir + self._path). Dann müsste man das dort auch ändern (würde es wenn denn direkt ins log Verzeichnis stecken, nicht..?)

year, month, etc. ist auch eine Funktionalität des datalog Plugins, das sonst aber nichts mehr kann als Core, drum hätt ich das so direkt in den shng Handler rein genommen.

msinn commented 11 months ago

operationlog speichert seit jeher den Cache ins Cache Verzeichnis (self._cachefile = self.get_sh()._cache_dir + self._path)

Ok, dass kann ein Problem im Zusammenspiel z.B. mit der Admin GUI sein, wenn man dort Cache Values verwaltet und im Verzeichnis wird eine non-Item-Cache Datei gefunden. Wenn wir das operationlog demnächst retiren, brauchen wir das aber nicht mehr anzupassen.

Dann müsste man das dort auch ändern (würde es wenn denn direkt ins log Verzeichnis stecken, nicht..?)

Direkt ins log Verzeichnis sollte man das auch nicht schreiben. Dann taucht es evtl. in der Admin GUI auf. Deshalb meinte ich ein Unterverzeichnis zum log Verzeichnis.

year, month, etc. ist auch eine Funktionalität des datalog Plugins, das sonst aber nichts mehr kann als Core, drum hätt ich das so direkt in den shng Handler rein genommen.

Du uast das aber in der Handler Klasse eingebaut. Wenn ein anderer Log-Handler benutzt wird, stehen die Werte nicht zur Verfügung.

onkelandy commented 11 months ago

OK, Pfadthema sollte dadurch gefixt sein, ja? https://github.com/smarthomeNG/smarthome/pull/606/commits/f26ebeb3b265a2eb891bf0f897a218d3abfcfefb

onkelandy commented 11 months ago

Zum Thema year - stamp.. Hatte ich kurz verwechselt. Die tatsächliche Idee war hier, Platzhalter für die Dateinamen nutzen zu können. Im Idealfall hätte dann bei einer Rotation die alte Datei noch gleich geheißen und ab sofort würde in die Datei mit dem neuen Datum geloggt werden. Das hat aber tatsächlich nicht geklappt, da müsste man glaub recht tief rein gehen. Vielleicht schaffst du das, kann dir gerne auch mal den gescheiterten Versuch zukommen lassen ;)

Die Funktionalität kommt übrigens vom datalog, wo zB jeden Tag in eine neue CSV Datei mit zB 2023-12-25.log bzw. 2023-12-26.log, etc. geloggt wird.

Diese Variablen also wären im Kontext mit filename = eval(f"f'{filename}'") relevant. Ich wüsste jetzt ehrlicherweise nicht, wo ich das hinsetzen sollte, damit es auch für TimedRotatingFileHandler klappt. Ehrlicherweise machen die Platzhalter ohne funktionierendem Rotating auch nur bedingt Sinn.

Morg42 commented 11 months ago

Warum

filename = eval(f"f'{filename}'")

und nicht zB

filename = eval("f'" + filename + "'")?

Finde die zweite Variante deutlich einfacher zu lesen und v.a. zu verstehen...

onkelandy commented 11 months ago

Hab ich so aus item.py übernommen, kannst aber gern an beiden Stellen updaten txt = eval(f"f'{self._log_text}'")

Morg42 commented 11 months ago

Hab ich so aus item.py übernommen Wollte nur wissen, ob es einen speziellen Grund für diese Schreibweise gibt, oder erwünschte Nebeneffekte ;)

Stimme für "merge"