Module – IPSLogger

Allgemein

Der IPSLogger ist ein PHP Modul, mit dem es möglich ist Anwendungs- und PHP Meldungen zu „Loggen“ und auf verschiedene „Outputs“ zu verteilen.

  • Anwendungsmeldungen

Im Allgemeinen werden Logging Meldungen vom Programmierer bzw. User typisiert/ klassifiziert (Error, Information, Debug, usw.) und in die eigenen Scripts eingebaut.

  • PHP Meldungen

Alle PHP Meldungen werden als „Fatal Error“ oder normaler „Error“ reportet, Voraussetzung ist die Registrierung eines PHP ErrorHandlers (Installation siehe weiter unten).

Log Types

Der Logger bietet 9 verschiedene „LogTypen“, mit ihnen wird die Art und Wichtigkeit einer Meldung kategorisiert. Für jeden „LogType“ steht eine eigene „Logging Routine“ zur Verfügung:

  • Fatal – Schwerwiegende Fehler, führt normalerweise zu einem kompletten Programmabbruch (LogLevel=0)
  • Error – „Normale“ Fehler (LogLevel=1)
  • Warning – Warnungen (LogLevel=2)
  • Notification – „Benachrichtigung“, wird benutzt um sich über bestimmte Ereignisse im System informieren zu lassen (Beschattung wurde aktiviert, oder Rasenbewässerung gestartet) (LogLevel=3)
  • Information – Informationsmeldungen, zur Protokollierung von Schaltvorgängen usw. (LogLevel=4)
  • Debug – „Debug“-Meldungen (LogLevel=5)
  • Communication – Protokollierung von Kommunikations Instanzen (Senden/ Empfangen über RS232, Sockets, …) (LogLevel=6)
  • Trace – Sehr detailierte Meldungen, um diverse Ablauffehler zu finden (LogLevel=7)
  • Test – „Test Meldungen“ – verwende ich nur temporär um Fehler zu finden, man kann nach diesen Meldungen suchen und sie nach finden des Fehlerers wieder entfernen(LogLevel=8)

Outputs

Es werden zur Zeit 8 verschiedene „Outputs“ unterstützt – für jeden kann man den „LogLevel“ spezifisch definieren:

  • SingleMsg Output: enthält die letzte „LogMeldung“ … vorgesehen für den Einsatz als Widget, um sofort auf einen Fehler aufmerksam gemacht zu werden (Verwendung von LogLevel Error oder Warning). Anzeige der Meldung kann durch „Klick“ auf die Meldung „Quittiert“/ „Resetet“ werden.
  • Html Output: Output in HTML Form zur Verwendung im WebFront, Anzahl der Messages kann konfiguriert werden
  • IPS Output: IPS interner Logging Output
  • File Output: Protokollierung in ein File, für jeden Tag wird ein neues LogFile angelegt, Anzahl der Tage kann definiert werden, danach werden die Files autom. gelöscht. Standardmäßig wird in das IPS „logs“ Verzeichnis gelogged, kann aber über eine Konstante auch verändert werden.
  • Log4IPS Output: XML Protokollierung, die sich an die allgemein bekannte Form Log4Net, Log4Java usw. anlehnt. Ansehen kann man sich das File am besten mit diversen Tools (ich persönlich verwende Log4View, freie Version kann man sich auf der Homepage des Herstellers Log4View downloaden).
  • Email Output: Bietet die Möglichkeit sich über Fehler im System per Email informieren zu lassen. Ein Sende Verzögerung kann konfiguriert werden (ggf. wichtig um nicht mit Mails überflutet zu werden), bei 0 wird bei jedem Fehler (wenn LogLevel auf Error) sofort gesendet, ansonsten wird die angegebene Zeit gewartet und danach werden sämtliche aufgetretenen Fehler als Liste in einer Email versandt. Um den Email Output verwenden zu können muß man im File „IPSLogger_Configuration.ips.php“ die ID für das SMTP Device eintragen. man kann optional auch noch 1-3 weitere Email Adressen eintragen – standardmäßig wird übrigens der Empfänger verwendet, der im Device angegeben ist.

Vorsicht(!): bei Delay 0 kann man sich potenziell einen Spam-Server basteln falls man irgenwo einen Endlos-Loop mit Fehler hat …

  • Echo Output: Das Echo-Output, kann in der Entwicklungsphase von Scripten genutzt werden.
  • Prowl Output: Dies ermöglicht das Senden von Messages direkt auf das iPhone.
  • SysLog Output: Senden der Messages an einen SysLog Server (dieser Output kann nur über die Konfiguration aktiviert/deaktiviert werden).
  • MySQL Output: Senden der Messages an eine MySQL Datenbank (dieser Output kann nur über die Konfiguration aktiviert/deaktiviert werden)

Installation

Das Modul ist bereits im „BaseLoader“ Script der IPSLibrary integriert.

Best Practice

Loggen mit Script-Konstante oder FileNamen
<?
   IPSUtils_Include ("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");
   define ("c_LogId", "MyProcedure");

   // Code …
   IPSLogger_Inf(c_LogId, "Schalte Licht …");
?>
<?
   IPSUtils_Include ("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");
   IPSLogger_Inf(__file__, "Schalte Licht …");
?>

Weitere Variante mit Zeilennummer des Skripts und vorheriger Überprüfung auf den Logger:

<?
	if (function_exists('IPSLogger_Dbg'))
		{ IPSLogger_Dbg(__file__ , "== Line ".__line__." == " .
		 "Schalte Licht ..."
		); }
?>
Loggen von Fehlern
<?
   IPSUtils_Include ("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");
   $VariableId = @IPS_GetVariableIDByName('MeineVariable', 0);

   if ($VariableId==0) {
      IPSLogger_Err(__file__, "Variable mit Namen 'MeineVariable' konnte nicht gefunden werden");
      exit; // Abbruch der aktuellen Verarbeitung
   }
?>

Screenshots:

IPSLogger_WebFrontEMailSettings

IPSLogger_WebFrontOutput

IPSLogger_WebFrontOverview

IPSLogger_WebFrontWidget