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 …
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…
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
Ü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 …
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
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.
@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.
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
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 ...");