Feature Request: Syslog Server

Scheint ja komplizierter zu sein als ich dachte.

Viel einfacher. Siehe vorherigen Beitrag.

Liegt aber an Andreas ob er das integrieren kann (Lizenz) oder will :smiley:

hab mal einen kurzen Blick auf die Klasse geworfen, sieht ja nicht so kompliziert aus, einfach eine Text Message, die über einen UDP Port gesendet wird - keine große Sache für IPS…

@Werner
kannst Du mal ein Echo for dem fwrite in der Klasse einbauen und einige Messages posten.

Nächster Schritt wäre dann einen UDP Socket in IPS anzulegen und die gleiche Message darüber zu senden!.

Hallo Andreas,

hier der Ausgabestring.

fp=Resource id #8 // Message=<14>May 19 20:15:42 sbs2008.wps-computer.local IP-Symcon: ID 34690::SENDER Execute: My third PHP syslog message 

fp = SocketConnection
Message ist der komplette String der übergeben wird. Die setzt sich zusammen wie in der Klasse definiert.
facility * 8 + severity // in meinem Beispiel

$syslog->SetFacility(1);
$syslog->SetSeverity(6);

1 * 8 + 6 = 14

Hier noch die Ausgabe als Text wo die <14> nicht drin ist. Denke das liegt an der Formattierung, dafür sind ein paar Leerzeichen vor dem Text.

fp=Resource id #8 // Message=May 19 20:15:42 sbs2008.wps-computer.local IP-Symcon:   ID 34690::SENDER Execute: My third PHP syslog message

Das fp= und Message= musst Du dir rausdenken :wink: kommt vom ECHO.

echo "fp=".$fp." // Message=".$message;

Aber warum über einen eigenen Weg über einen extra UDP-Socket. Könntest Du doch direkt in deinen Code einbauen.

Extra Socket muss ja wieder erstellt und konfiguriert werden.

In der Klasse steht, dass die php_sockets.dll benötigt wird, das könnte in Zukunft wieder Probleme bei Update geben - darum meiner erster Gedankengang mit dem IPS Socket …

Das hatte ich doch glatt übersehen. :rolleyes:

Die php_socket.dll gehört zu meiner Grundaustattung.

Hallo Werner,

hab heute mal eine erste Version einer SysLog Integration in den IPSLogger gebastelt.
Zu finden ist der neue Logger vorerst mal auf meinem NewFeatures Repository
–> also Update mittels IPSModuleManager:


	IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
	$moduleManager = new IPSModuleManager('IPSLogger', 'https://raw.github.com/brownson/IPSLibrary/NewFeatures');
	$moduleManager->UpdateModule();

Folgende Konfigurations Parameter sind nötig (muss man manuell in Config File hinzufügen, wenn der Logger bereits installiert ist:


	/** Konfigurations Parameter für SysLog Output
	 *
	 * Über diesen Parameter wird gesteuert, ob die Meldungen auch auf den SysLog Output geschrieben werden soll.
	 *
	 * Parameter kann jederzeit geändert werden.
	 */
	define ("c_SysLog_Enabled",    true);

	/** Konfigurations Parameter für SysLogTypes
	 *
	 * Über diesen Parameter wird gesteuert, welche Meldungen auf den SysLog Output geschrieben werden
	 *
	 * Parameter kann jederzeit geändert werden.
	 */
	$SysLog_LogTypes  = array(true/*Fat*/, true/*Err*/, true/*Wrn*/, true/*Not*/, true/*Inf*/, true/*Log*/, false/*Dbg*/, false/*Trc*/, false/*Tst*/);

	/** Konfigurations Parameter für SysLog Instance
	 *
	 * Dieser Parameter spezifiziert die Socket Instanz, über die die SysLog Meldung gesendet wird
	 * Alternativ ist auch die Angabe von SysLog Host+Port (siehe Parameter weiter unten) möglich, allerdings
	 * ist hierfür die php_sockets.dll nötig.
	 *
	 * Parameter kann jederzeit geändert werden.
	 */
	define ("c_SysLog_Instance",    '');

	/** Konfigurations Parameter für SysLog Host 
	 *
	 * Dieser Parameter spezifiziert den SysLog Host, der die Message empfangen soll (nur notwendig,
	 * wenn keine Instanz definiert wurde)
	 *
	 * Parameter kann jederzeit geändert werden.
	 */
	define ("c_SysLog_Host",    '');

	/** Konfigurations Parameter für SysLog Host 
	 *
	 * Dieser Parameter spezifiziert den SysLog Port, auf den die Message gesendet werden soll (nur notwendig,
	 * wenn keine Instanz definiert wurde)
	 *
	 * Parameter kann jederzeit geändert werden.
	 */
	define ("c_SysLog_Port",    '');

Vorerst wird das Ganze rein über die Konfigurations Parameter gesteuert (also keine Integration der Einstellungen im WebFront). Sollte aber im Falle vom SysLog kein Problem sein.

Mit dem Parameter c_SysLog_Enabled kann man den Output ein- bzw. ausschalten. Mit $SysLog_LogTypes kann man steuern welche LogTypen aktiviert sind.
Der Rest ist für das Senden - hab auch die Kommunikation über die DLL gleich integriert.

Konnte den Output aber mangels SysLog Server noch nicht in der Praxis testen - probiers mal aus, wenn Du etwas Zeit hast, eventuell müssen wir an der Message noch etwas Feintuning betreiben…

Servus Andreas,

vielen Dank das Du an dem Thema dran bleibst.

Update und Integration der weiteren Parameter in der Config hat geklappt.

Ich nutze natürlich die php_socket.dll :slight_smile:

Ausgaben scheinen auch sauber zu funktionieren.

Was noch fehlt ist die Integration der c_LogId, bin mir aber auch nicht sicher wo man die platzieren sollte. Sinnvoll wäre sie auf jeden Fall um im Syslog-Server danach filtern zu können. Mal sehen ob man die in die Kategorie bekommt.

Hallo Werner,

schön zu sehen, dass das gleich auf Anhieb funktioniert hat.

Was wäre Dein Vorschlag für den Log Context?
Wenn ich das richtig sehe bleibt eh nur Suffix von Program oder Prefix von Nachricht, wobei ich persönlich eher für zweiteres tendiere.

Servus Andreas,

prinzipiell wäre ich auch für eine Präfix in der eigentlich Message, nur kann man das in den seltensten Fällen als Suchkriterium bzw. Filter nutzen.

Hier wäre mir (pers. Meinung) die Suffix bei Programm dann lieber da ich diese dann filtern kann und somit Folgeanalysen von Fehler fahren kann.

Habe auch nichts anderes von Dir erwartet :slight_smile:

Neue Version ist Online (mit Context als Suffix von Programm).
Sollten keine Probleme mehr auftreten, werde ich das Ganze am Wochenende in meinen Development Branch mergen…

Moin Andreas.

Test ich heute Abend.

Guten Abend Andreas,

von meiner Seite grünes Licht.

OK, sehr gut, werde das Feature in den nächsten Tagen mergen.