Hauptmenü

Fhem Logfile

Begonnen von Parador, 16 Juli 2020, 20:42:05

Vorheriges Thema - Nächstes Thema

Parador

Hallo Zusammen,

eigentlich um spontanen Neustarts leichter auf die Schliche zu kommen habe ich die Logfile-Frequenz umgestellt.
Meine Logfile Definition sieht jetzt so aus:
Internals:
   DEF        ./log/fhem-%Y-%m-%d-%H.log fakelog

   FD         114
   FUUID      5c7add50-f33f...
   NAME       Logfile
   NR         22
   NTFY_ORDER 50-Logfile
   REGEXP     fakelog

   STATE      active
   TYPE       FileLog
   currentlogfile ./log/fhem-2020-07-16-19.log
   logfile    ./log/fhem-%Y-%m-%d-%H.log


Dazu passend habe ich den Eintrag in global auch geändert. (Auszug)
Internals:
   DEF        no definition
   FD         3
   NAME       global
   NR         1
   STATE      no definition
   TYPE       Global
   currentlogfile ./log/fhem-2020-07-16-20.log
   init_errors
   logfile    ./log/fhem-%Y-%m-%d-%H.log
Attributes:
   autoload_undefined_devices 1
   autosave   0
   configfile fhem.cfg
   logfile    ./log/fhem-%Y-%m-%d-%H.log

und jetzt sieht man evtl. auch schon meine Frage ;-) Warum wird das "currentlogfile" im Logfile nicht aktuallisiert es bleibt "hängen"? Bei global steht das richtige drinnen und wird auch aktuallisiert...
Hab ich was vergessen?

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Parador

#2
ok, das wär zu einfach... ;-) Probier ich kann dann, kann aber erst später sagen ob es klappt ;-)

Dann aber gleich die nächste Frage...
Versuche ja den Neustarts auf die Schliche zu kommen. Habe mir deshalb eine Hilfe gebastelt wo ich auch noch eine Hilfestellung bräuchte:

+*00:20:00 {
my $clf = InternalVal("Logfile","currentlogfile","none");
my $actualLinesNr = qx (wc -l $clf);

my $myverboselevel = AttrVal("global","verbose",0);
my $loglinelimit = 34;
if ($myverboselevel < 3 ) { my $loglinelimit = 15; }
if ($myverboselevel > 4 ) { my $loglinelimit = 35000; }

$actualLinesNr =~ s,^(\d+).*,$1,g;
my $delta = $actualLinesNr - ReadingsVal("Logfile","lastKnownLinesInTheFile",0);
fhem"set TelegramBot2 message FHEM Logfile kontrollieren, $delta Zeilen mehr! Loglinelimit: $loglinelimit Verboselevel: $myverboselevel" if ($delta > $loglinelimit );
fhem"setreading Logfile lastKnownLinesInTheFile $actualLinesNr";
}


ich würde gerne das "loglinelimit" dynamisch setzen, d.h. in Abhängigkeit des verboselevels...
Normal habe ich verbose "2" und im Moment "5".

MadMax-FHEM

Was hat nicht geklappt, weil "hat nicht geklappt" sagt/hilft nix...

Aber du solltest die "my" bei den auskommentierten Zeilen löschen...

Die Variable ist doch schon "angelegt"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Parador

Hallo Joachim und danke,
habe jetzt mal die my's entfernt, hast Recht die gibts ja schon.
Und mit "hat nicht geklappt" ist leider wirklich so, habe keinen Logeintrag oder Fehler gehabt, die beiden Zeilen wurden einfach "ignoriert" (also auch ohne die ##)
;-)
VG

MadMax-FHEM

#5
Und klappt es jetzt!?

Bzw. wurde es verm. nicht ignoriert und gab keinen Fehler (verm.) weil verbose ist Standard auf 3. Diesen "Fall" und auch verbose=4 "umgehst" du aber ja...

Wollte ich eben schon anmerken aber es kann ja sein, dass du 0-4 die 15 haben willst und für größer 4 dann 35000.

EDIT: das erste if ist eigentlich nutzlos... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Parador

#6
Habe leider ein doppeltes Nein...
der Neustart, hat nichts an der Tatsache geändert, dass bei Logfile das currentfile hängenbleibt, dort steht jetzt um 22:38 noch das 21 Uhr logfile.
Und die erste Meldung die ich per Telegram erhalten habe teilte mir ein verboselevel 0 mit, obwohl es aktuell auf 5 steht... - und vorher hatte ich verbose = 2, was vermutlich an meinem Versuch mit ReadingsVal() liegt, ist wohl eher ein AttrVal() - habe ich korrigiert
achja und für verbose = 3 habe ich "34" ;-) (frisch hinterlegt)

amenomade

#7
verbose ist kein Reading sondern ein Attribut
EDIT: oops, schon gerade von Parador geschrieben
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MadMax-FHEM

Aha...

Äh geht es nun!?

Und ja ist ein Attribut...

Besser posten wie es jetzt aussieht, wenn du noch fragen hast...
...weil im Original-Post ist aktuell ja nur die 34 geändert...

Andere Frage: was willst du tun!?

Hab jetzt nicht den Code gelesen (hab nur Handy grad)...

verbose kann aber auf Device-Ebene auch eingestellt werden... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

amenomade

Vielleicht etwas nachzudenken: euch ist bewusst, dass eine neue Logfile, passend zu Wildcards in dem logfile Attribut, erst angelegt wird (und das Internal entspr. gesetzt wird), wenn etwas tatsächlich in der Log geschrieben werden muss?

Wenn tagelang nichts geloggt werden muss, hat currentlogfile immer noch den Wert vom letzten Log Eintrag.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Parador

Hallo amenomade,

klar wird nur ein Logfile angelegt wenn es etwas zum reinschreiben gibt ;-) Mit verbose 5 hatte ich um 22:38 Uhr rund 30000 Zeilen im Logfiel für 22 Uhr. Den ersten Eintrag hatte ich um 22:00:00. Ich habe eben nur festgestellt, das der Vermerk bei currentlogfile in Logfile nicht dauernd gesetzt wird. Aktuell 06:45 Uhr steht er bei ./log/fhem-2020-07-17-00.log.  Damit greift mein Auswerteversuch (nicht mehr).

Habe den Post oben bearbeitet wie es aktuell aussieht.
Die Abfrage des verboselimits funktioniert, aber es wird nicht mehr ausgelöst, weil das Logfile ja "gleichbleibt" und damit keine Änderung stattfindet.

betateilchen

Es macht grundsätzlich wenig Sinn, in FHEM Aktionen ausführen zu wollen, die auf die Veränderung von INTERNAL beruhen.

Internals sind keine "alternativen readings".
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Parador

Hallo betateilchen,
ok, verstehe ich, aber wie bekomme ich dann das aktuelle Protokoll zu fassen?

Parador

Nun um das noch ein wenig zu verfeinern: Ich habe auch das Attribut "nrarchive" auf 12 gesetzt... Auch das wird ignoriert...
habe jetzt aktuell 31 der stündlichen Logfiles ...

Otto123

Hi,

Was mich auffällt:
ZitatInternals:
   DEF        ./log/fhem-%Y-%m-%d-%H.log fakelog

   FD         114
   FUUID      5c7add50-f33f...
ZitatInternals:
   DEF        ./log/fhem-%Y-%m.log fakelog
   FD         8
   FUUID      5c5f294e-f33f-520c-6dc0-60bc4dc205e3da1a
   NAME       Logfile
Wozu ist die Leerzeile in Zeile 2 ? Es gab Fälle da störte sowas den Modulfrieden...

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz