Zurück tutorials.de > Programming > PHP

 
 
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)

Themen: 242.975 | Beiträge: 1.352.293 | Mitglieder: 169.418 (Stand 28.01.10) | Fragen zur Nutzung von Tutorials.de? Nutzungsregeln | Kontaktformular | Impressum
 
 
tutorials.de Buch-Verschenkaktion

  AntwortAntworten (über Gastzugang)    
  AntwortAntworten (über Gastzugang)    
 
LinkBack (7) Themen-Optionen Ansicht
Alt 27.11.06, 23:40   Link/s auf einer externen Seite. Klicken um diese/n anzuzeigen. #1 (permalink)
Mitglied Silber
 
Benutzerbild von SaschaT  
 
Registriert seit: Aug 2006
Ort: Stuttgart
Beiträge: 72
Renommee-Modifikator: 8
SaschaT hat eine blütenweiße Weste

Mit PHP in eigene Logfiles schreiben

Hallo,

ich möchte gern mit PHP alle Seitenaufrufe meiner (in PHP geschriebenen) Webseite loggen und zwar geht es mir um Fehlersuche, ich möchte vor allem PHP-Session Variablen, MySQL-Queries, ihre Fehlermeldungen in ein Logfile ablegen.

Soll nix aufwendiges werden. Ich würde die Daten gern in eine Text-Datei schreiben (nicht in eine Datenbank). Am liebsten im XML-Format um später die Darstellung übersichtlicher zu machen. Die grundlegenden PHP-Techniken beherrsche ich, aber ich wäre für ein paar Tipps dankbar. Was muss ich zum Beispiel beachten für den Fall, dass mehrere Instanzen gleichzeitig in die Datei schreiben wollen? Wenn ich das XML-Format wähle, ist es es ja nicht damit getan, einfach eine neue Zeile an die bestehende Text-Datei anzuhängen.

Gibt es eventuell schon gute fertige Lösungen für sowas?
__________________
trivago - Mitmachen, Spaß haben, Geld verdienen. Die Reisecommunity, die's in sich hat.
  SaschaT ist offline  
 
Alt 28.11.06, 00:25   #2 (permalink)
Mitglied Gold
 
Registriert seit: Jun 2004
Beiträge: 108
Renommee-Modifikator: 12
Descartes hat eine blütenweiße Weste

Re: Mit PHP in eigene Logfiles schreiben

Hallo!

Eine Logging Klasse um selbstdefinierte Fehler in eine Logdatei zu schreiben gibts hier:

http://www.phpclasses.org/browse/package/1290.html

Zum Download mußt Du Dich wahrscheinlich registrieren.

Vielleicht kann man die für xml - Ausgabe umschreiben? Mir reicht die Textversion aus.

Dabei ist auch eine Error Handler Funktion, die ich noch nicht getestet habe, aber damit könntest Du sogar die von PHP erzeugten Fehlermeldungen mit set_error_handler() in das Logbuch "umleiten".

Grüße

Martin
  Descartes ist offline  
 
Alt 28.11.06, 00:25   #3 (permalink)
ich wisch hier durch
 
Registriert seit: Feb 2005
Ort: hinterm Mond gleich Links
Beiträge: 5.239
Renommee-Modifikator: 49
Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen

Re: Mit PHP in eigene Logfiles schreiben

Hallo!

Hast Du Dir schon das Error Handling von PHP angesehen?
Ich weiss aber nicht ob man so die von PHP ausgespuckten Fehler logen kann.

Ansonsten kannst Du auch eine eigene Fehlerbehandlung bauen.
Wenn Du selbst erstellte (aussagekräftige) Fehlermeldungen benutzt, sollte es eigentlich langen.

Gruss Dr Dau
__________________
Schri-Schra-Schrödi *g*
mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
Dinge, die mit Tabellen besser klappen als mit CSS
Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
Meine Links zum Thema Linux (Last update: 21.06.2009)
Zitat:
Kein Busen ist so flach wie das Niveau dieser Party!
----
Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
----
Ich habe 3 Kinder und kein Geld!
Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)
  Dr Dau ist offline  
 
Alt 28.11.06, 22:24   #4 (permalink)
Mitglied Silber
 
Benutzerbild von SaschaT  
 
Registriert seit: Aug 2006
Ort: Stuttgart
Beiträge: 72
Renommee-Modifikator: 8
SaschaT hat eine blütenweiße Weste

Re: Mit PHP in eigene Logfiles schreiben

Zitat:
Zitat von Descartes Beitrag anzeigen
Hallo!

Eine Logging Klasse um selbstdefinierte Fehler in eine Logdatei zu schreiben gibts hier:

http://www.phpclasses.org/browse/package/1290.html

Zum Download mußt Du Dich wahrscheinlich registrieren.

Vielleicht kann man die für xml - Ausgabe umschreiben? Mir reicht die Textversion aus.

Dabei ist auch eine Error Handler Funktion, die ich noch nicht getestet habe, aber damit könntest Du sogar die von PHP erzeugten Fehlermeldungen mit set_error_handler() in das Logbuch "umleiten".

Grüße

Martin

Danke, Martin.

Hab die verlinkte Seite gerade mal überflogen und das sieht eigentlich ganz gut aus. Textversion reicht mir für den Anfang auch erstmal aus, xml wäre für später aber ganz schön - mal sehen ob ich mir das dan entsprechend zurechtbastle.

Danke für den Tipp!
__________________
trivago - Mitmachen, Spaß haben, Geld verdienen. Die Reisecommunity, die's in sich hat.
  SaschaT ist offline  
 
Alt 28.11.06, 22:25   #5 (permalink)
Mitglied Silber
 
Benutzerbild von SaschaT  
 
Registriert seit: Aug 2006
Ort: Stuttgart
Beiträge: 72
Renommee-Modifikator: 8
SaschaT hat eine blütenweiße Weste

Re: Mit PHP in eigene Logfiles schreiben

Zitat:
Zitat von Dr Dau Beitrag anzeigen
Hallo!

Hast Du Dir schon das Error Handling von PHP angesehen?
Ich weiss aber nicht ob man so die von PHP ausgespuckten Fehler logen kann.

Ansonsten kannst Du auch eine eigene Fehlerbehandlung bauen.
Wenn Du selbst erstellte (aussagekräftige) Fehlermeldungen benutzt, sollte es eigentlich langen.

Gruss Dr Dau

Ja, das Error Handling kenn ich. Aber ich brauche Infos, die darüber hinausgehen. Ich möchte Sachen, die keine Fehler sondern einfach ein ungewolltes Verhalten verursachen protokollieren können - z.Bsp. dynamisch erzeugte SQL-Queries, die zwar syntaktisch korrekt sind, aber nicht die gewünschten Resultate liefern etc.

Dennoch danke für den Hinweis.

Sascha
__________________
trivago - Mitmachen, Spaß haben, Geld verdienen. Die Reisecommunity, die's in sich hat.
  SaschaT ist offline  
 
Alt 28.11.06, 23:22   #6 (permalink)
ich wisch hier durch
 
Registriert seit: Feb 2005
Ort: hinterm Mond gleich Links
Beiträge: 5.239
Renommee-Modifikator: 49
Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen

Re: Mit PHP in eigene Logfiles schreiben

Kleines Beispiel (allerdings nicht getestet ).
PHP-Code:
<?php
$query 
"SELECT * FROM `users` WHERE `name`='foo'"// als Beispiel fragen wir die Datenbank ab ob es den User "foo" gibt
$result mysql_query($query); // Query wird ausgeführt
if($result == TRUE) ( // es wird geprüft ob die Abfrage zum Ergebnis führt
    
while($row mysql_fetch_array($result)) {
        echo 
"Der User ".$row['name']." ist in der Datenbank vorhanden."// dann wird das Ergebnis/die Ergebnisse ausgegeben
    
}
} else { 
// wenn die Abfrage kein Ergebnis liefert
    
$logfile fopen("logfile.log""a"); // wird die Logdatei geöffnet
    
$error date("d.m.Y H:i:s")." - Die Datenbankabfrage ".$query." hat zu keinem Ergebnis geführt.\r\n"// und die Fehlermeldung (inkl. Datum/Uhrzeit und dem Query)
    
fwrite($logfile$error); // in die Logdatei geschrieben
    
fclose($logfile); // und zum Schluss wird die Logdatei wieder geschlossen
}
?>
Wo das Query herkommt oder wie es zusammengestellt wird, spielt dabei keine Rolle.
Das Thema Sicherheit etc. habe ich jetzt mal weggelassen.

So, oder so ähnlich, kannst Du im grunde so ziemlich alles logen.
Ist zwar mit Arbeit verbunden, aber dafür kannst Du es ganz individuell realisieren (im gegensatz zu fertigen Lösungen ).
Die Arbeit lässt sich allerdings auch minimieren..... in dem man z.b. für wiederkehrende Aktionen entsprechende Funktionen schreibt.
__________________
Schri-Schra-Schrödi *g*
mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
Dinge, die mit Tabellen besser klappen als mit CSS
Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
Meine Links zum Thema Linux (Last update: 21.06.2009)
Zitat:
Kein Busen ist so flach wie das Niveau dieser Party!
----
Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
----
Ich habe 3 Kinder und kein Geld!
Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)
  Dr Dau ist offline  
 
Alt 29.11.06, 00:10   #7 (permalink)
Mitglied Silber
 
Benutzerbild von SaschaT  
 
Registriert seit: Aug 2006
Ort: Stuttgart
Beiträge: 72
Renommee-Modifikator: 8
SaschaT hat eine blütenweiße Weste

Re: Mit PHP in eigene Logfiles schreiben

Was passiert denn wenn sich zwei fwrites von zwei verschiedenen Instanzen meines Skripts in die Quere kommen - sprich zwei oder mehr User gleichzeitig zu loggende Ereignisse auslösen?
__________________
trivago - Mitmachen, Spaß haben, Geld verdienen. Die Reisecommunity, die's in sich hat.
  SaschaT ist offline  
 
Alt 29.11.06, 09:47   #8 (permalink)
ich wisch hier durch
 
Registriert seit: Feb 2005
Ort: hinterm Mond gleich Links
Beiträge: 5.239
Renommee-Modifikator: 49
Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen Dr Dau genießt hohes Ansehen

Re: Mit PHP in eigene Logfiles schreiben

Dann dürfte es vermutlich zu einem Problem kommen (ist aber auch bei MySQL nicht anders).
Du kannst das Logfile aber (genauso wie auch bei MySQL) veriegeln.
Hierzu gibt es die Funktion flock().
Da ich mit dieser Funktion aber noch nie gearbeitet habe und sie sich in der Praxis nur sehr schwer testen lässt, kann ich Dir nicht sagen ob PHP die anderen Zugriffe buffert und hinterher ausführt, oder ob sie einfach verworfen werden.
Vielleicht kann dazu ja einer von den Profis etwas sagen.

Je nach dem was Deine Seite so alles macht, könnte man aber auch mit mehreren Logfiles arbeiten (z.b. eins für Datenbankzugriffe, eins für unvollständig/fehlerhaft ausgefüllte Formulare usw.).
Das Risiko der mehrfachen Zugiffe besteht so zwar auch, wird aber zumindest minimiert.
__________________
Schri-Schra-Schrödi *g*
mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
Dinge, die mit Tabellen besser klappen als mit CSS
Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
Meine Links zum Thema Linux (Last update: 21.06.2009)
Zitat:
Kein Busen ist so flach wie das Niveau dieser Party!
----
Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
----
Ich habe 3 Kinder und kein Geld!
Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)
  Dr Dau ist offline  
 
Alt 08.04.08, 00:14   #9 (permalink)
Grünschnabel
 
Registriert seit: Aug 2007
Beiträge: 1
Renommee-Modifikator: 0
cisco211 hat eine blütenweiße Weste

aktuelle News/Nachricht AW: Mit PHP in eigene Logfiles schreiben

Weiß net obs hilft, hab auch eine Logfunktion die in Dateien des heutigen (US) Datums schreibt (YYYY-MM-DD.log) und )perfekt Funktioniert, hab sie mal schnell von Objekt-Methode zu Funktion umgewandelt. Allerdings muß man selber das Ereignis Schreiben, was gerade stattfindet. Müßte außerdem ausreichend erklärt sein. Ich hoffe ich konnte Helfen.

PHP-Code:

// Verwendete Konstante
define("EOL","\r\n");

 
/*****************************************************************************
  * Publicfunktion: Log schreiben.                                            *
  * ------------------------------------------------------------------------- *
  * Version: 0.120   Status: Alpha Release 3   Edit: 2008-01-03 to 2008-04-07 *
  *     by C!$C0^211 2007-2008    http://cisco211.de    TjSBMD1810@yahoo.de   *
  *****************************************************************************/
function log_write($input_level,$input_maxlevel,$input_path,
                           
$input_content "",$input_customlevel "") {
  
$file $input_path."/".date("Y-m-d",time(TRUE)).".log";
  
//$file = $input_path;

  /***** Erstelle neue Logdatei, wenn noch nicht vorhanden ********************/
  
if ($input_maxlevel 0) {
   
$string =
    
"#############################".EOL.
    
"# <NAME>-Logfile ".date("Y-m-d",time(TRUE))." #".EOL.
    
"# ========================= #".EOL.
    
"# File created at: ".date("H:i:s",time(TRUE))." #".EOL.
    
"#############################".EOL.EOL;
   if (!
file_exists($file)) {
    if (!
$fileheader fopen($file,"w")) {
     
$status["int"] = 3;
     
$status["str"] = "LOG_COULD_NOT_OPEN_FILE";
     return 
$status;
     }   
// if (!$fileheader = fopen($file,"a"))
    
if (!fwrite($fileheader,$string)) {
     
$status["int"] = 3;
     
$status["str"] = "LOG_COULD_NOT_WRITE_FILE";
     return 
$status;
     }   
// if (!$fileheader = fopen($file,"a"))
    
if (!fclose($fileheader)) {
     
$status["int"] = 4;
     
$status["str"] = "LOG_COULD_NOT_CLOSE_FILE";
     }   
// if (!fclose($fileheader))
    
else {
     
$status["int"] = 0;
     
$status["str"] = "LOG_OK";
     }   
// else von if (!fclose($fileheader))
    
}   // if (!file_exists($file))
   
}   // if ($input_maxlevel > 0)

  /***** Ordne dem Loglevel eine Wertigkeit zu ********************************/
  
switch($input_level){

   
/**** Wert:(OFF) ***********************************************************/
   
case "off":
    
$loglevel_int 0;
    
$loglevel_str "";
    break;

   
/**** Wert:ERROR ***********************************************************/
   
case "error":
    
$loglevel_int 1;
    
$loglevel_str "ERROR";
    break;

   
/**** Wert:SECURITY ********************************************************/
   
case "security":
    
$loglevel_int 2;
    
$loglevel_str "SECURITY";
    break;

   
/**** Wert:WARNING *********************************************************/
   
case "warning":
    
$loglevel_int 3;
    
$loglevel_str "WARNING";
    break;

   
/**** Wert:SESSION *********************************************************/
   
case "session":
    
$loglevel_int 4;
    
$loglevel_str "SESSION";
    break;

   
/**** Wert:STATUS **********************************************************/
   
case "status":
    
$loglevel_int 5;
    
$loglevel_str "STATUS";
    break;

   
/**** Wert:ACCESS **********************************************************/
   
case "access":
    
$loglevel_int 6;
    
$loglevel_str "ACCESS";
    break;

   
/**** Wert:CUSTOM1 *********************************************************/
   
case "custom1":
    
$loglevel_int 7;
    
$loglevel_str "[C1:".$input_customlevel."]";
    break;

   
/**** Wert:USTOM2 **********************************************************/
   
case "custom2":
    
$loglevel_int 8;
    
$loglevel_str "[C2:".$input_customlevel."]";
    break;

   
/**** Wert:DEBUG ***********************************************************/
   
case "debug":
    
$loglevel_int 9;
    
$loglevel_str "DEBUG";
    break;

   
/**** Wert:Off *************************************************************/
   
default: // UNKNOWN
    
$loglevel_int 0;
    
$loglevel_str "";
    break;
   }   
// switch($input_level)

  /***** Logeintrag Erstellen *************************************************/
  
if ($loglevel_int AND $loglevel_int <= $input_maxlevel) {

   
/**** Erstelle Log-Zeile ***************************************************/
   
$string date("H:i:s",time(TRUE))." ".
    
$_SERVER["REMOTE_ADDR"]." [".$loglevel_str."]: ".$input_content.EOL;

   
/**** Oeffne Datei *********************************************************/
   
if (!$fileheader fopen($file,"a")){
    
$status["int"] = 2;
    
$status["str"] = "LOG_COULD_NOT_OPEN_FILE";
    return 
$status;
    }   
// if (!$fileheader = fopen($file,"a"))

   /** Schreibe Datei *********************************************************/
   
if (!fwrite($fileheader,$string)) {
    
$status["int"] = 3;
    
$status["str"] = "LOG_COULD_NOT_WRITE";
    return 
$status;
    }   
// if (!fwrite($fileheader,$string))

   /* Schliesze Datei *********************************************************/
   
if (!fclose($fileheader)) {
    
$status["int"] = 4;
    
$status["str"] = "LOG_COULD_NOT_CLOSE_FILE";
    }   
// if (!fclose($fileheader))
   
else {
    
$status["int"] = 0;
    
$status["str"] = "LOG_OK";
    }   
// else von if (!fclose($fileheader))
   
}   // if ($loglevel_int > 0 AND $loglevel_int <= $loglevel)
  

~211^

Geändert von cisco211 (08.04.08 um 00:26 Uhr).
  cisco211 ist offline  
 
 
 
Lesezeichen:


Themen-Optionen
Ansicht
LinkBacks (?)
 
Erstellt von Für Typ Datum
Class: Logging - PHP Classes Dieses Thema Refback 26.09.08 12:05
Class: Logging (logging) - PHP Classes Dieses Thema Refback 22.08.08 13:02
Class: Logging (logging) - PHP Classes Dieses Thema Refback 23.05.08 08:22
PHP Classes - Class: Logging Dieses Thema Refback 27.07.07 06:49
PHP Classes - Class: Logging Dieses Thema Refback 11.05.07 23:39
PHP Classes - Class: Logging Dieses Thema Refback 07.05.07 17:07
PHP Classes - Class: Logging Dieses Thema Refback 26.01.07 17:59

Ähnliche Themen
 
Thema Autor Forum Antworten Letzter Beitrag
Eigene Wochenunterteilung mit PHP paulee PHP 5 04.09.06 22:13
Mit PHP in andere PHP Datei Schreiben DelphiDell PHP 5 05.02.06 23:49
Htaccess mit PHP und Logfiles? bienchen_2 PHP 5 20.10.05 15:45
Eigene Fehlerseite mit PHP Shiro-san PHP 72 09.08.05 17:11
Probleme mit Webserver-Logfiles :( Christoph Hosting & Webserver 0 24.05.02 08:34
» Tools
 
tutorials.de-Tools tutorial.de-Suchfeld tutorial.de-Widget tutorial.de-RSS-Feed tutorial.de-Banner
» Neue Links
 
Hits: 101
»
JHT's Planetary...
(Cinema 4D-Objekte)
Hits: 223
»
Tageslicht ohne GI
(Cinema 4D-Tutorials)
Hits: 114
»
Puzzle
(Cinema 4D-Tutorials)
Hits: 83
»
Lacreme
(Cinema 4D-Tutorials)
Hits: 163
»
Liquid Light
(Cinema 4D-Tutorials)
» Aktuelle Umfrage
 
Bist du mit der Geschwindigkeit der Tutorials.de-Website zufrieden?
Ja, es putzt mir glatt den Staub vom Bildschirm! - 75,00%
60 Stimmen
Nein, ich denke da muss noch nachgebessert werden... - 25,00%
20 Stimmen
Stimmen gesamt: 80
Du darfst bei dieser Umfrage nicht abstimmen.

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch) & vBadvanced CMPS v.3.2.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0 ©2009, Crawlability, Inc.
Alle Rechte vorbehalten ©2000 - 2010 tutorials.de
Design by Mark, CSS by Maik & Sven Mintel
Seite generiert in 0,30423 Sekunden mit 26 queries