IPSLogger - mein kleiner feiner LogHandler für IPS

Sieh Dir mal zum Beispiel das Script IPSLogger_PurgeLogFiles an:
in der 2. Zeile definiere ich mir die Variable c_LogId


define ("c_LogId", "IPSLogger_PurgeLogFiles");

Diese Konstante verwende ich für alle Log Einträge in diesem Script:


IPSLogger_Err(c_LogId, 'Error Opening Directory '.$Directory);

dadurch kann ich die LogEinträge jederzeit zuordnen.

Teilweise verwende ich für die LogId auch nur ein Kürzel, wie zB „LogPurge“.

Eventuell könnte man den Namen des Scriptes, das den Fehler verursacht hat auch autom. zum Log hinzufügen (speziell bei Errors), werd da mal etwas forschen …

lg
Andreas

IPSLogger_Fat(IPS_GetName($IPS_SELF), "Fehlertext");

Super Danke ( IPS_GetName ) !
Bin die Doku durchgehangen und bei „Scriptverwaltung“ war
nur IPS_GetScript und da war nix dabei.

@1007

Good job :slight_smile:

Bei deiner Installationsanweisung ist in Zeile 4 ein kleiner Fehler.
BeiClick=IPSLogger_ClearSingleMsg , müsste IPSLogger_ClearSingleOut sein
oder :confused:

Jürgen

Ja, danke, stimmt natürlich, habs soeben ausgebessert.

Habe gestern auch noch die Verbesserungen von 1007 in die Scripts eingepfegt und noch einige Konstanten in IPSLogger_Constants hinzugefügt (unter anderem kann man dort jetzt auch das Datumsformat definieren, das man gerne verwenden möchte).

Unter Umständen muß man dort auch noch etwas Feintuning für den HTML Style (Schriftgröße, ColumnSize, …) betreiben, habe es leider NICHT geschafft, das der Output auf allen Browsern gleich aussieht (ich verwende zur Zeit Firefox, Chrome und Safari).

Verbesserungsvorschläge sind natürlich jederzeit willkommen…

lg
Andreas

Hallo Andreas,

nach Anleitung installiert, Testskript erstellt, funktioniert.

Was soll man sagen.

SUPER ARBEIT !!!

Danke

Hallo Andreas,

auch von meiner Seite vielen Dank für das Update.

Brauche nicht mal ein Test-Script, da das Programm schon laufende Programme „durchleuchtet“ und Fehler findet. :smiley:

Gruß
Bruno

Hi Brownson,

ich habe hier einen Fall, den das Script nicht abdeckt:

ein Ereignis hat versucht eine Variable anzusteuern die nicht mehr vorhanden war. Ich hab mir seit tagen 'nen Wolf gesucht um rauszufinden was die Ursache für die IPSLogger-Fehlermeldung war:


```php

Warning: Warning: Objekt #24275 existiert nicht
Error in Script C:\IP-Symcon\- on Line 1


Die Fehlermeldung wurde immer schön im WebFrontEnd angezeigt und mir als Mail geschickt.

nun hab ich die IPS-Logs (also die originalen) durchsucht und habe dadurch die Ursache gefunden:


```php

Skriptausführung: IPS_RunScript(24275);IPS_SetEventActive(49214, false);SetValue(32197,false); ~ Absender: Ereignis #49214, Zeit Ereignis

Der Auslöser war ein Ereignis in dem ein Befehl auf die nicht mehr existierende Variable zielte…
Vielleicht kannst Du das bei Gelegenheit mit einbauen?
Ansonsten läuft der IPSLogger seit Tagen ohne murren und meldet fleissig den Bullshit den ich im IPS verzapfe :wink:

Hi Andreas,
ich habe deinen LogHandler gerade in Betrieb genommen - läuft bis jetzt wunderbar!

Vielen Dank für die investierte Mühe / Zeit,
Markus

@Raketenschnecke

Überprüf doch mal, ob der PHP ErrorHandler richtig eingerichtet ist, bei mir werden solche Fehler korrekt an den IPSLogger weitergeleitet.
Folgende Zeile in die Datei php.ini im IPS Root Verzeichnis hinzufügen:
auto_prepend_file=„C:\IP-Symcon\scripts\IPSLogger_PhpErrorHandler.ips.php“

Falls IPS in einem anderen Verzeichnis liegt, muss der Pfad natürlich entsprechend angepasst werden.

Bei mir löst das Setzen eines Wertes mit einer ungültigen ID einen Fehler im Logger aus:

SetValue(4711, 0);

@All: Freut mich natürlich, dass der Logger gut ankommt und die Zeit zum Schreiben eines Installations-Scripts nicht umsonst waren …

lg
Andreas

Hi Andreas,

danke für den Support :slight_smile:

ich hab sicherheitshalber nochmal die php.ini überprüft (ich habe das IPS-Verzeichnis vor ein paar Tagen von „C:\Programm Files“ nach „C:“ umgezogen), stimmt aber alles.

Das Problem habe ich nicht bei fehlerhaften Scripts (hab sicherheitshalber dein Beispiel in ein Script gepackt -> funktioniert tadellos mit Angabe des Scriptnamens) sondern dann wenn in einem Ereignis ein Befehl eingebettet ist der auf eine nicht existierende ID referenziert. Auch das habe ich gerade mit deinem Beispiel nachgestellt, das Ergebnis im IPS-Logger ist


Error in Script C:\IP-Symcon\- on Line 1

ok, verstehe - da fällt mir ein, ich hatte das Problem vor einigen Tagen auch und habe mir da bereits eine zusätzliche Protokollierung eingebaut, die mir für PHP Fehler das File ausgibt.

Eventuell werde ich den Filenamen in Zukunft anstatt „PHP“ als Context bei PHP Fehlern übergeben.

Außerdem arbeite ich sehr viel mit Includes, dadurch hatte ich Konflikte mit mehrfach definierten Konstanten c_logId. Ich habe jetzt noch was eingebaut, dass mir den Filenamen aus dem Context extrahiert (schneidet Pfad und Extension aus). Dadurch kann ich den Logger jetzt mit der ServerVariable „file“ aufrufen (file ist eine globale PHP Variable, die das aktuelle File angibt).

IPSLogger_Inf(__file__, "My Logging Message ...");

Werde die Version bei Gelenheit wieder online stellen.

lg
Andreas

Hallo zusammen,

habe mit dem Logger bereits einige Scripts optimiert.

Frage:
Kann man auf die Meldungen die IPS generiert und die im Meldungsfenster der Verwaltungskonsole anzeigt werden von aussen zugreifen ?

Habe das Problem, das mein 1-wire noch nicht absolut stabil läuft und würde deshalb gerne die Events (CRC-failure) in den Logger integrieren.

@Brownson

Es wäre schön, wenn du neben e-mail auch Prowl in deinen Logger integrieren würdest,

Grüße aus Franken
Jürgen

das wäre Klasse, wenn Du die Weiterentweicklung hier zur Verfügung stellst. Ich teste gerne :slight_smile:

Hi Brownson,

It took some time to get it up and running and integrated but is seems to work :p.

Just an idea: would this be a great thing/code for the wiki (Hauptseite).

Thanks,
Robert

@Robert, good idea, i will have a look, how to do it …

@Jürgen, kannst Du das mit"Prowl" noch etwas genauer erläutern was Du Dir da vorstellst. Trotz etwas suchen im Forum, kann ich mit dem Begriff „Prowl“ nicht wirklich etwas anfangen (bzw. nur das es etwas mit einem Apfel zu tun hat …)

Sorry für meine späte Antwort, bin bereits mit meinem nächsten IPS Projekt wieder voll beschäftigt.

lg
Andreas

Hallo,

habe es eben auch probiert und nach Anleitung installiert.
Funktioniert prima :).

Vielen Dank.

Gruß
Thorsten

@Andreas

Prowl ist die Möglichkeit push notifications aufs iPhone zu senden.
Hier im Forum http://www.ip-symcon.de/forum/f53/iphone-push-notification-ip-symcon-9322/
ist dies sehr gut Beschrieben.

Damit kannst du kostenlose Nachrichten auf’s iPhone schicken.

Würde mir neben der emailout auch ein prowlout wünschen :slight_smile:

Gruß
Jürgen

Herzlichen Dank für das Script.

Das ist in der Tat eine sehr wertvolle Ergänzung für mein System. Da ich mittlerweile Licht, Bewässerung, Rollladen Steuerung, Warmwasser, Heizung, Kühlung, Raumluftsteuerung, Sicherheit, Verbrauchsmessung Strom und Gas, Musik, Internet sowie das Messen und darstellen der Raum und Umweltdaten über IPS laufen lasse wird das Thema Fehlersuche und Ausfallsicherheit immer wichtiger. Das Script wird mir sehr helfen auf komfortable Art die Qualität der oben genannten Services weiter zu verbessern und je weniger Fehler um so weniger Diskussionen mit meiner besseren Hälfte.

Die Installation hat problemlos funktioniert, die Anleitung und das Installationsscript ist vorbildlich

Beste Grüße aus Berlin

Hallo,

habe wieder einige kleinere Verbesserungen an meinem Logger vorgenommen:

neuer Output Prowl:
mit diesem Output ist es möglich Log Messages direkt auf sein iPhone weiterzuleiten (dazu muss das Handy nicht mal eingeschaltet sein, Details zur Installation von Prowl findet Ihr auch unter folgendem Eintrag).
Um den Logger Output verwenden zu können muss man in der Datei IPSLogger_Constants.ips.php den dazugehörigen API Key eintragen.
Zusätzlich zu den normalen Logging Routinen, habe ich auch noch eine eigene Function zum direkten Senden von Prowl Messages implementiert (Output Enabled bzw. LogLevel werden in diesem Falle nicht überprüft):

function IPSLogger_SendProwlMessage($Event, $Description, $Priority);

Neuer Output Echo:
Habe auch noch einen Logger Output „Echo“ hinzugefügt, der die Log Messages per Echo wiedergibt. Dieser Output hat sich beim Entwickeln von Scripts als sehr praktikabel herausgestellt (Achtung: Wenn man mit dem WebFront arbeitet, sollte man diesen NICHT aktiviert haben, da man ansonsten die Meldungen dauernd am Schirm hat…).
Zum Ein- und Ausschalten des Outputs verwende ich normalerweise die Prozedure IPSLogger_SetEchoOut (optional kann man auch gleich den gewünschten LogLevel übergeben):

IPSLogger_SetOutEcho(true, c_LogLevel_All);

// Code to be tested

IPSLogger_SetOutEcho(false);

Als Logging Context verwende ich zur Zeit fast ausschließlich den aktuellen Filenamen, da ich sehr viel mit Includes arbeite und ansonsten in Konflikte mit mehrfach definierten Constanten gekommen bin. Der Logger erkennt, dass es sich um einen FileNamen handelt und entfernt autom. Direktory und File-Extension.

Ein Logger Aufruf sieht dann typischer Weise so aus:


include_once "IPSLogger.ips.php";

IPSLogger_Inf(__file__, "My Logging Message ..."); 

Lg
Andreas

IPSLogger_2011-02-18.zip (10.7 KB)