Log3 und/oder temporäres Debug-Log

Begonnen von balli1187, 24 Juli 2019, 14:20:37

Vorheriges Thema - Nächstes Thema

balli1187

Hallo,

Ich zwei mehr oder weniger separate Fragen, die dann aber doch wieder zusammen spielen, daher in einem Thread:

Zuerst das einfach:
- ich habe mir angeschaut, wie ich eigene Einträge ins Log schreiben kann und bin auf Log3 gestoßen. Leider finde ich immer nur den Thread, in dem die Umstellung von Log auf Log3 angekündigt wurde. Mir reicht das aber nicht zum Verständnis, daher die Frage:
Was gibt der erste Parameter $name in
Log3 $name, 3, "Log-Meldung"
an?

Ich dachte zunächst es gibt den Namen, des Devices an, dass die Log-Meldung verursacht. Wenn ich es in einem DOIF verwende, hätte ich dann dan Namen des betreffenden DOIF erwartet, bekomme aber eine Fehlermeldung. mit undef funktioniert es.

Zweite frage:
- kann ich Ausgaben in ein separates Log umleiten?
Hintergrund1: zum debuggen dreht man ja öfter mal verbose auf 5 aber das landet dann alles im globalen Log. Ich würde es gern in ein separates temporäres filelog schreiben, um a) alle Meldungen beisammen zu haben, ohne das mir ein anderes Gerät dazwischen grätscht und b) das globale Log vom verbose 5 datenwust frei zuhalten.
Hintergrund2: ich hatte überlegt meine DOIF/notify/at mit Ausgaben pro cmd zu versehen, um (auch eher zum debuggen) besser nachvollziehen zu können, ob/wann/warum etwas ausgeführt wurde. Damit möchte ich aber auch nicht zwangsläufig das globale Log fluten.

Kann man sowas umsetzen?


Gesendet von iPhone mit Tapatalk
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero

rudolfkoenig

ZitatWas gibt der erste Parameter $name ... an
Den Namen (oder $hash) einer FHEM-Definition/Instanz. Z.Bsp. "global" oder $defs{global}
Damit ist es moeglich Instanz-spezifisch verbose zu setzen.
Wie DOIF $name vorbelegt, weiss ich aber nicht.

Zitat- kann ich Ausgaben in ein separates Log umleiten?
- wenn du die Daten _nicht_ in das globale Log schreiben willst (wie beschrieben), dann nicht ohne Log3 neu zu definieren.
- sonst kann man ein notify darauf setzen, was die Daten per trigger zu einem FileLog/DbLog schickt.

Apropos trigger: wieso verwendest du nicht trigger+FileLog fuer Debugging statt Log3?

balli1187

Zitat von: rudolfkoenig am 24 Juli 2019, 15:08:55
Den Namen (oder $hash) einer FHEM-Definition/Instanz. Z.Bsp. "global" oder $defs{global}
Instanz = FHEM-Installation?
Sorry für die dumme Frage aber so richtig, ist es mit nicht klar geworden....
Zitat
- wenn du die Daten _nicht_ in das globale Log schreiben willst (wie beschrieben), dann nicht ohne Log3 neu zu definieren.
Neu definieren = Funktion im FHEM-Code in Perl umprogrammieren?
Das ginge mir zu weit, da es ja sich bei jedem Update wieder überschrieben würde.
Zitat
- sonst kann man ein notify darauf setzen, was die Daten per trigger zu einem FileLog/DbLog schickt.

Apropos trigger: wieso verwendest du nicht trigger+FileLog fuer Debugging statt Log3?
Beim suchen bin ich halt als erstes auf Log3 gestoßen... könntest du das mit trigger noch etwas beschreiben? Auch hier weis ich noch nicht, ob ich richtig verstanden hab, wo die Reise hingeht.


Gesendet von iPhone mit Tapatalk
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero

rudolfkoenig

ZitatInstanz = FHEM-Installation?
Nein, ich meine den Namen einer Definition, also debugWriter aus
define debugWriter FileLog debugWriter log/debugWriter.log


Zu trigger:
Nachdem man diesen FileLog definiert hat, kann man mit dem FHEM-Befehltrigger debugWriter meine spezielle debugausgabeoder mit{ fhem("trigger debugWriter meine spezielle debugausgabe ".localtime()) }in die Datei log/debugWriter.log Daten schreiben.



ZitatDas ginge mir zu weit, da es ja sich bei jedem Update wieder überschrieben würde.
Das kann man zwar vermeiden (Log3 in 99_myUtils.pm ueberschreiben), ich empfehle es aber auch nicht.

balli1187

ZitatWas gibt der erste Parameter $name ... an
ZitatDen Namen (oder $hash) einer FHEM-Definition/Instanz. Z.Bsp. "global" oder $defs{global}
ZitatNein, ich meine den Namen einer Definition, also debugWriter aus
define debugWriter FileLog debugWriter log/debugWriter.log
Wenn ich das alles zusammen nehme, gebe ich mit $name das Log-Device an, oder?
Offenbar nicht, denn wenn ich {Log3 debugWriter,3, "irgendwas"}in die Kommandozeile eingebe, erhalte ich Bareword "debugWriter" not allowed while "strict subs" in use at (eval 406465) line 1.

Mit trigger und ein bisschcen Kreativität werde ich wahrscheinlich Hintergrund2 meiner Frage umsetzen können.
Soweit ich verstanden habe, ist aber Hintergrund1 aktuell nicht möglich, richtig?
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero

rudolfkoenig

Zitat{Log3 debugWriter,3, "irgendwas"}
Wenn, dann bitte
{Log3 "debugWriter",3, "irgendwas"}

ZitatSoweit ich verstanden habe, ist aber Hintergrund1 aktuell nicht möglich, richtig?
Mit etwas perl-Logik beim Absetzen des triggers schon. Das ist aber weder performant, noch elegant.
(Vorsicht mit sowas wie "nicht moeglich", weil FHEM fast an jeder Ecke mit perl code erweiterbar ist)

Wenn Du auf getrennte Dateien pro Device bestehst, empfehle ich eine eigene Funktion in 99_myUtils zu erstellen, mit eigenen Namen (nicht Log3).

balli1187

Zitat von: rudolfkoenig am 24 Juli 2019, 23:52:15
Wenn, dann bitte
{Log3 "debugWriter",3, "irgendwas"}
Das ergibt weder eine Fehlermeldung noch einen Logeintrag. Weder im globalen Log, noch im angegebenen debugWriter.
ZitatMit etwas perl-Logik beim Absetzen des triggers schon. Das ist aber weder performant, noch elegant.
(Vorsicht mit sowas wie "nicht moeglich", weil FHEM fast an jeder Ecke mit perl code erweiterbar ist)

Wenn Du auf getrennte Dateien pro Device bestehst, empfehle ich eine eigene Funktion in 99_myUtils zu erstellen, mit eigenen Namen (nicht Log3).
Gemeint war, dass es in existierenden Funktionen/Modulen nicht vorgesehen ist. Das man quasi alles umsetzen kann, wenn man es nur programmieren kann, ist klar aber dafür fehlt mir das Wissen.



Gesendet von iPhone mit Tapatalk
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero