IPSLogger - mein kleiner feiner LogHandler für IPS

Hallo Leute,

hab mir einen LogHandler für IPS geschrieben und weil ich mir dachte, der könnte auch für andere interessant sein, hab ich ein auch gleich ein Installations Script geschrieben.

Habe meine Logs in verschiedene Kategorien bzw. Levels unterteilt, je höher der Level desto detailierter die Protokolierung:

[ul]
[li]Fatal – Schwerwiegende Fehler (LogLevel=0)
[/li][li]Error – „Normale“ Fehler (LogLevel=1)
[/li][li]Warning – Warnungen (LogLevel=2)
[/li][li]Notification – Warnungen (LogLevel=3)
[/li][li]Information – Informationsmeldungen, zur Protokollierung von Schaltvorgängen usw. (LogLevel=4)
[/li][li]Debug – Debug Meldungen (LogLevel=5)
[/li][li]Communication – Protokollierung von Kommunikations Instanzen (Senden/Empfangen über RS232, Sockets, …) (LogLevel=6)
[/li][li]Trace – Sehr detailierte Meldungen, um diverse Ablauffehler zu finden (LogLevel=7)
[/li][li]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)
[/li][/ul]

Unterstütze zur Zeit 8 verschiedene Outputs, für jeden kann man den LogLevel spezifisch definieren:

[ul]
[li]SingleMsg Output: enthält die letzte LogMeldung, vorgesehen 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.
[/li][li]Html Output: Output in HTML Form zur Verwendung im WebFront, Anzahl der Messages kann konfiguriert werden
[/li][li]IPS Output: IPS interner Logging Output
[/li][li]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.
[/li][li]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 ).
[/li][li]Email Output: Bietet die Möglichkeit sich über Fehler im System per Email informieren zu lassen. Ein Sende Verzögerung kann konfiguriert werden, bei 0 wird bei jedem Fehler (wenn LogLevel auf Error) sofort gesendet, ansonsten wird die angegebene Zeit gewartet und danach alle aufgetretenen Fehler als Liste versandt. Um den Email Output verwenden zu können muß man im File IPSLogger_Constants die ID für das SMTP Device eintragen. Optional kann man auch noch 1-3 Email Adressen eingtragen, standardmäßig wird der Emfä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 …
[/li][li]Echo Output: Echo Output, kann in der Entwicklungs Phase von Scripten genützt werden.
[/li][li]Prowl Output: Ermöglicht das Senden von Messages direkt auf das iPhone.
[/li][/ul]

Installation:
siehe Wiki: /wiki/IPSLogger

Best Practice zur Verwendung des Loggers:
siehe Wiki: /wiki/IPSLogger

Vor der Installation natürlich Backup machen.

lg
Andreas

Hallo
Schoenes Teil.
Hab es gleich probiert und es funktioniert beinahe
problemlos. Einzig die Farben gehen nicht , auch der 2 Eintrag in der
Liste Trc,Inf,Dbg wird nicht angezeigt ( siehe Bild )

log.png

wow! beeindruckendes Programm!

ich habs gleich installiert, soweit ich das Programm verstehe (das wird wohl noch dauern bis ich alles durchdrungen habe) funktioniert auch alles (incl. Mail).

Danke sehr!

@1007

hab mir meinen Code nochmals angesehen, zu diesem Effekt kann es eigentlich nur kommen, wenn man globale Variablen in PHP disabled hat.

Wirf da einmal einen Blick drauf.

Werde meine globalen Variablen in den nächsten Tagen durch eine Alternative ersetzen, da die Verwendung von globals ohnehin nicht sehr „sauber“ ist …

lg
Andreas

Hallo
Eintrag in php.ini sieht so aus :register_globals=on
phpinfo zeigt auch :register_globals=on

Jetzt wo du was von Globals schreibt , seit meinem letzten
IPS update ging ein Script von mir nicht mehr in dem ich
Globals verwendet habe. Meine aktuelle Version ist
Kernel 2.30
LiveUpdate 07.11.10 #1799

Werd mal ein Update machen wenn es eins gibt.

Hab noch einiges probiert und es mit folgendem Code zum Laufen gebracht

	include_once "IPSLogger_Constants.ips.php";
	include_once "IPSLogger_Output.ips.php";

	Include "IPSLogger.ips.php";

   define ("c_LogId", "My");

   IPSLogger_Inf(c_LogId, "Info");
   IPSLogger_Err(c_LogId, 'Error');
	IPSLogger_Fat(c_LogId, 'Fatal');
	IPSLogger_Wrn(c_LogId, 'Warning');
	IPSLogger_Dbg(c_LogId, 'Debug');
	IPSLogger_Com(c_LogId, 'Comment');
	IPSLogger_Tst(c_LogId, 'Test');
	IPSLogger_Trc(c_LogId, 'Trace');

ohne die include_once vor dem Aufruf geht es nicht.

hmm, versteh ich nicht, die beiden includes sollten im File IPSLogger.ips.php stattfinden.

Ist glaub ich mein Fehler. Geht jetzt.
Hat wohl mit einem include in einer Function zu tun.
Hab es getestet mit
einer Function

 
require_once IPS_GetScriptID("Funcpool").".ips.php";
ipslog();

im Funcpool gibt es die Function

function ipslog()
	{
	
	Include_once "IPSLogger.ips.php";
	
   define ("c_LogId", "My");

   IPSLogger_Inf(c_LogId, "Info");
   IPSLogger_Err(c_LogId, 'Error');
	IPSLogger_Fat(c_LogId, 'Fatal');
	IPSLogger_Wrn(c_LogId, 'Warning');
	IPSLogger_Dbg(c_LogId, 'Debug');
	IPSLogger_Com(c_LogId, 'Comment');
	IPSLogger_Tst(c_LogId, 'Test');
	IPSLogger_Trc(c_LogId, 'Trace');
	
	}

Das geht so nicht.
Das geht


require_once IPS_GetScriptID("Funcpool").".ips.php";
Include "IPSLogger.ips.php";
ipslog();

Alles wird gut :slight_smile:

Na Bestens, dann gibts ja jetzt schon 2 die meinen LogHandler in Betrieb haben …

Hallo
Hab heute mal fuer mich etwas geaendert weil ich die farblichen Balken ueber
die ganze Bildschirmbreite haben wollte

			$TablePrefix  = '<table 100% style="'.c_Style_HtmlOutTable.'">';
      $TablePrefix  = $TablePrefix ."<colgroup>";
      $TablePrefix  = $TablePrefix ."<col width='10'>";
      $TablePrefix  = $TablePrefix ."<col width='10'>";
      $TablePrefix  = $TablePrefix ."<col width='10'>";
      $TablePrefix  = $TablePrefix ."<col width='300'>";
      $TablePrefix  = $TablePrefix ."<col width='2000'>";
      $TablePrefix  = $TablePrefix ."</colgroup>";
 

Ausserdem ist mir aufgefallen , dass bei der Uhrzeit die Microsekunden immer
000 ist (wers braucht ). Und gleich noch das Datumsformat geaendert.

		   $Out .=    '<td>'.date('d.m.Y H:i:s').substr(microtime(1),-5).'</td>';   

Vielleicht kannst du es in der naechsten Version einbauen.

Hallo Andreas,

jetzt min. 3 (oder, die es zugeben) :smiley: Danke für Deine Arbeit und die Veröffentlichung.

@1007

Datumsformat geaendert.
PHP-Code:
$Out .= ‚<td>‘.date(‚d.m.Y H:i:s‘).substr(microtime(1),-5).’</td>’;

Wo muss ich das ändern / ergänzen ? Script „IPSLogger_Output“ ?

Gruß
Bruno

Genau. Original Zeile 120 fuer die HTML-Ausgabe.

$Out .=    '<td>'.date('Y-m-d H:i:s').substr(date('.u'),0,4).'</td>';

Dann bin ich die 4. Tolle Arbeit. Danke.

@1007

Danke, werde es morgen gleich einpflegen.

Das wäre super, wenn diese Software weiter gepflegt werden würde.
Mir fällt zwar noch nicht viel ein was noch fehlen könnte - was ich aber aktuell vermisse ist die Angabe der Fehlerquelle/Ursache. Wäre das möglich?

Also ich uebergebe den Scriptnamen wo der Fehler war im Aufruf

IPSLogger_Err($script, $text)

Erscheint dann in Spalte 3

sorry, ich bin noch neu im Thema, kannst Du das näher erläutern?

Also wenn der Aufruf so ist

IPSLogger_Fat("Ursache","Es ist ein Fehler aufgetreten");

dann kommt das raus

ich bin mir grad nicht sicher ob wir Beide das gleiche meinen: ich meine die Angabe des Scripts/Events etc, welches den Fehler (bzw. Logeintrag) verursacht hat.
Oder kapier ich Deine Erläuterungen grad nicht ?
:confused:

Sorry , Vielleicht.
Beim Aufruf zum Eintragen im Log kannst du im ersten Parameter den String
angeben der in Spalte 3 erscheinen soll.
Zweiter Parameter ist der Fehlertext.
Was du im ersten Parameter angibst ist ja deine Sache.
Wenn du den willst das im Log das Script auftaucht welches den Fehler
eingetragen hat musst du das machen

IPSLogger_Fat($IPS_SELF, "Fehlertext");

$IPS_SELF ist eine interne Variable die die aktuelle ID des Scripts
angibt.

BTW: Weiss jemand wie ich aus der ID den Scriptnamen rauskriege ??