Hallo, ich habe das Problem, dass ich gern aus einer PHP-Anwendung heraus Einträge in eine Log-Datei machen möchte. Dabei ist wichtig, dass der Content, den ich schreiben will auch auf jeden Fall zusammenhängend in der Datei landet. Wegen sehr vieler parallel laufender Prozesse hab ich die Befürchtung, dass ein String, der gerade in die Datei geschrieben wird [z.B. mit echo "content" >> /file.log] sich quasi mit einem nahezu zeitgleichen Aufruf eines anderen Prozesses überlagert. Dann würde ja nur Müll entstehn. Ein Beispiel: Prozess1: echo "\ncontent1" >> /log_file 2>&1 Prozess2: echo "\ncontent2" >> /log_file 2>&1 Ich möchte unbedingt vermeiden, dass dabei irgendwie sowas wie \nconte \ncontent1nt2 entsteht. Ein locking aus PHP heraus mit lock() ist auch ein bischen problematisch, weil dann die Situation auftreten kann, dass Prozess 2 gar nicht loggen kann. Am liebsten wäre mir, wenn ich die Linux-internen Log-Mechanismen wie den syslogd z.B. über logger mittels exec() ansprechen könnte, um diese Aufgabe zu erledigen. Ist das möglich? Dieser müsste doch im zweifelsfall eine Queue aufbauen, die er dann abarbeitet, richtig? Gruß Rico
Am Donnerstag, 3. Februar 2005 16:04 schrieb Rico [radax]:
ich habe das Problem, dass ich gern aus einer PHP-Anwendung heraus Einträge in eine Log-Datei machen möchte. Dabei ist wichtig, dass der Content, den ich schreiben will auch auf jeden Fall zusammenhängend in der Datei landet. Wegen sehr vieler parallel laufender Prozesse hab ich die Befürchtung, dass ein String, der gerade in die Datei geschrieben wird [z.B. mit echo "content" >> /file.log] sich quasi mit einem nahezu zeitgleichen Aufruf eines anderen Prozesses überlagert. Dann würde ja nur Müll entstehn.
Ein Beispiel: Prozess1: echo "\ncontent1" >> /log_file 2>&1 Prozess2: echo "\ncontent2" >> /log_file 2>&1
Müssen die verschiedenen Prozesse in ein und das selbe Logfile schreiben ? Gruss Thomas
Müssen die verschiedenen Prozesse in ein und das selbe Logfile schreiben ? Ja. Multi-User-Web-Umgebung. Was ich loggen wil, sind Fehler/Unschärfen in der Business-Logik. Also - keine PHP-Fehler, die automatisch geloggt werden würden. z.B. Wenn ich eine Info nicht in der DB finde, die aber eigentlich tunlichst drin stehen sollte. Solche Events sollen in einer zentralen Log-Datei auflaufen.
Gruß Rico
Am Donnerstag, 3. Februar 2005 16:50 schrieb Rico [radax]:
Müssen die verschiedenen Prozesse in ein und das selbe Logfile schreiben ?
Ja. Multi-User-Web-Umgebung. Was ich loggen wil, sind Fehler/Unschärfen in der Business-Logik. Also - keine PHP-Fehler, die automatisch geloggt werden würden. z.B. Wenn ich eine Info nicht in der DB finde, die aber eigentlich tunlichst drin stehen sollte. Solche Events sollen in einer zentralen Log-Datei auflaufen.
Ah da reicht mein Wissen noch nicht aus, sorry. Ich hätte es (noob-technisch) zuerst in verschiedene Files laufen lassen und diese dann zusammengefügt. Gruss Thomas
Hallo, ich würde das über den syslogd machen, der ist doch genau dazu da. Syslog kann auch mehrere Logdatein handeln, eine davon könnte man für die spezielle Anwendung konfigurieren, in die dann alle PHP-Scripte mit der PHP-Internen Funktion syslog() schreiben können. Viele Grüße Thomas
Probier doch mal das folgende Pear-Paket: http://pear.php.net/package/Log Gruß Florian
Am Donnerstag, 3. Februar 2005 16:50 schrieb Rico [radax]:
Müssen die verschiedenen Prozesse in ein und das selbe Logfile schreiben ?
Ja. Multi-User-Web-Umgebung. Was ich loggen wil, sind Fehler/Unschärfen in der Business-Logik. Also - keine PHP-Fehler, die automatisch geloggt werden würden. z.B. Wenn ich eine Info nicht in der DB finde, die aber eigentlich tunlichst drin stehen sollte. Solche Events sollen in einer zentralen Log-Datei auflaufen.
Ah da reicht mein Wissen noch nicht aus, sorry. Ich hätte es (noob-technisch) zuerst in verschiedene Files laufen lassen und diese dann zusammengefügt.
Gruss Thomas
On Thu, Feb 03, 2005 at 04:50:31PM +0100, Rico [radax] wrote:
Müssen die verschiedenen Prozesse in ein und das selbe Logfile schreiben ? Ja. Multi-User-Web-Umgebung. Was ich loggen wil, sind Fehler/Unschärfen in der Business-Logik. Also - keine PHP-Fehler, die automatisch geloggt werden würden. z.B. Wenn ich eine Info nicht in der DB finde, die aber eigentlich tunlichst drin stehen sollte. Solche Events sollen in einer zentralen Log-Datei auflaufen.
Ich wuerde in die Datenbank loggen. Peter -- the big can of spam ate the big can of spam
Hallo Rico, probier mal dieses Pear-Paket: http://pear.php.net/package/Log. Ich habe es selber noch nicht getestet, bietet aber laut der Beschreibung das, was Du suchst. Gruß Florian
ich habe das Problem, dass ich gern aus einer PHP-Anwendung heraus Einträge in eine Log-Datei machen möchte. Dabei ist wichtig, dass der Content, den ich schreiben will auch auf jeden Fall zusammenhängend in der Datei landet. Wegen sehr vieler parallel laufender Prozesse hab ich die Befürchtung, dass ein String, der gerade in die Datei geschrieben wird [z.B. mit echo "content" >> /file.log] sich quasi mit einem nahezu zeitgleichen Aufruf eines anderen Prozesses überlagert. Dann würde ja nur Müll entstehn.
Ein Beispiel: Prozess1: echo "\ncontent1" >> /log_file 2>&1 Prozess2: echo "\ncontent2" >> /log_file 2>&1
Ich möchte unbedingt vermeiden, dass dabei irgendwie sowas wie \nconte \ncontent1nt2 entsteht.
Ein locking aus PHP heraus mit lock() ist auch ein bischen problematisch, weil dann die Situation auftreten kann, dass Prozess 2 gar nicht loggen kann.
Am liebsten wäre mir, wenn ich die Linux-internen Log-Mechanismen wie den syslogd z.B. über logger mittels exec() ansprechen könnte, um diese Aufgabe zu erledigen. Ist das möglich? Dieser müsste doch im zweifelsfall eine Queue aufbauen, die er dann abarbeitet, richtig?
Hallo Rico, hallo Leute, Am Donnerstag, 3. Februar 2005 16:04 schrieb Rico [radax]:
ich habe das Problem, dass ich gern aus einer PHP-Anwendung heraus Einträge in eine Log-Datei machen möchte. Dabei ist wichtig, dass der Content, den ich schreiben will auch auf jeden Fall zusammenhängend in der Datei landet. [...] Am liebsten wäre mir, wenn ich die Linux-internen Log-Mechanismen wie den syslogd z.B. über logger mittels exec() ansprechen könnte, um diese Aufgabe zu erledigen. Ist das möglich?
Hilft Dir die PHP-Funktion error_log() ? Wo genau die hinloggt, kannst Du in der php.ini einstellen oder direkt beim Aufruf der Funktion angeben. Details siehe PHP-Doku ;-) Gruß Christian Boltz -- [...] bis zur Erwähnung des gesuchten Punktes sind es nur ein paar "Bild-down"s. Wenn Du mir erzählen willst, dass das schwer zu finden ist, mache ich ab Morgen eine Linux-Kindergarten-Mailingliste auf und lade Dich dazu ein. [Henning Hucke in suse-linux]
participants (6)
-
Christian Boltz
-
Florian Kieling
-
poeml@cmdline.net
-
Rico [radax]
-
Thomas Janssen
-
Thomas Rudolph