Fehler loggen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fehler loggen

    Hallo,

    ich würde gerne alle Fehler, die auf meiner Seite auftreten in einer mysql-DB loggen.

    Leider fehlt mir jeglicher Ansatz dazu.
    Wie würdet ihr da vorgehen?

    Notices auch loggen?
    Aber vor allem:
    Wie erreiche ich es, dass Fehler nicht beim User ausgegeben werden, sondern NUR in der DB landen? (beim User dann notfalls eine Fehlermeldung oder ein exit())

    Folgendes soll geloggt werden:
    - IP des users
    - User-ID
    - Zeit des Fehlers
    - Typ des Fehlers
    - Zeile + Datei, wo der Fehler auftrat
    - usw.... lieber zu viel als zu wenig

    Wie gesagt, mir fehlt nur der Ansatz, also die Logik...
    Die Programmierung bekomme ich dann hin, denke ich.

    Seggl-hoch-drei
    Tempim.de - Dein kostenloser Bildhoster
    Tipps und Tricks für Webmaster

  • #2
    error_reporting, display_errors, display_startup_errors, set_error_handler, set_exception_handler ... oder einfach mal http://www.php.net/manual/en/book.errorfunc.php komplett lesen.


    Und überlege dir, wohin du DB-Fehler wie "could not connect" loggen willst.

    Kommentar


    • #3
      -deleted-
      Zuletzt geändert von Seggl-hoch-drei; 20.04.2008, 10:34.
      Tempim.de - Dein kostenloser Bildhoster
      Tipps und Tricks für Webmaster

      Kommentar


      • #4
        jo, so sieht mein errorhandler jetzt aus:

        PHP-Code:
        //errorhandler
        set_error_handler('error_handling');

        function 
        error_handling($code$msg_error$file$line$vars)
        {
            if(
        $code != 8//8 ist unwichtig
            
        {
                global 
        $connection;
                
        $msg = new msg_vm($connection);
                
        $msg->set_subject("FEHLER: ".$code." @ ".$msg_error);
                
        $msg->set_user_from(-1);    
                
        $msg->set_user_to(2);
                
        $msg->set_text("[b]Errorcode:[/b]".$code."<br 
        />[b]MSG:[/b]"
        .$msg_error."<br />[b]Datei:[/b]".$file."<br
         />[b]Zeile:[/b]"
        .$line."<br /><br 
        />[b]User:[/b]"
        .$_SESSION["user_id"]."<br 
        />[b]Zeit:[/b]"
        .date('d.m.Y - H:i'time()));
                
        $msg->send(); 
            
                
        $err  "<br /><b>Zeit</b>: " date("d.m.Y - H:i:s"time());
                
        $err .= "<br /><b>Fehler</b>: " $code;
                
        $err .= "<br /><b>Beschreibung</b>: " $msg_error;
                
        $err .= "<br /><b>Datei</b>: " $file;
                
        $err .= "<br /><b>Zeile</b>: " $line;
                
        $err .= "<br /><b>User</b>:" .$_SESSION["user_id"];
                
        $err .= "<br /><b>Beteiligte Vars</b>:<br /><pre> " .print_r($vars,1)."</pre>";        
                
                 
        error_log($err3$_SERVER['DOCUMENT_ROOT']."logs/seiten/virtual-meetings/".
        date("d-m-Y"time()).".txt");
            }


        für verbesseunrsvorschläge bin ich jederzeit offen
        Zuletzt geändert von Seggl-hoch-drei; 20.04.2008, 20:16.
        Tempim.de - Dein kostenloser Bildhoster
        Tipps und Tricks für Webmaster

        Kommentar


        • #5
          Jetzt loggst du jeden Fehler zweimal, in der DB und in einem Logfile. Wozu?
          Und was passiert, wenn die DB grad nicht verfügbar ist?
          Wie kann ein Entwickler (du!) das Error Reporting jetzt noch beeinflussen?

          Warum verwendest du nicht die PHP-Tags dieses Forums?

          Kommentar


          • #6
            Das mit den PHP-Tags hab ich grad behoben.

            Und ich logge es zusätlich in der DB, weil ich dann sofort bei einem Fehler benachrichtigt werde. (Durch mein Messengerskript)

            Wie kann ein Entwickler (du!) das Error Reporting jetzt noch beeinflussen?
            Wie meinste das? Versteh ich nicht ganz..
            Tempim.de - Dein kostenloser Bildhoster
            Tipps und Tricks für Webmaster

            Kommentar


            • #7
              Ich meine dein Errorhandler loggt ganz stur alles was nicht $code == 8 hat. Dabei wünscht man sich während der Entwicklung doch sicher ein ausführlicheres Logging als im späteren Livebetrieb. Diesen "loglevel" sollte man an zentraler Stelle einstellen können, z.B. in der Konfigurationsdatei, die auch die DB-Zugangsdaten enthält.

              Wirf mal einen Blick auf Zend_Log.

              Und bitte brich deinen Code um. Das machen die PHP-Tags des Forums nämlich nicht von selbst und wir scrollen alle nicht gern horizontal.

              Kommentar


              • #8
                Hab den Code umgebrochen.


                Ok, damit hast du natürlich recht.
                Wie sollte ich das machen?

                Ein globales Array erstellen, das alle error-nummern enthält, die geloggt werden sollen?
                Tempim.de - Dein kostenloser Bildhoster
                Tipps und Tricks für Webmaster

                Kommentar


                • #9
                  Ich würde es mit Konstanten versuchen, Stichwort define(). Dadurch erhalten die Loglevel einen Namen und sind global verfügbar.

                  Kommentar


                  • #10
                    Hier meine neue Version:

                    Hast du dir das so gedacht?

                    PHP-Code:
                    //errorhandler
                    set_error_handler('error_handling');

                    function 
                    error_handling($code$msg_error$file$line$vars)
                    {
                        
                    //was soll alles geloggt werden?
                        
                    $arrLog = array(E_ERROR =>                 1
                                        
                    E_WARNING =>             1,
                                        
                    E_PARSE =>                 1,
                                        
                    E_NOTICE =>             0,
                                        
                    E_CORE_ERROR =>         1,
                                        
                    E_CORE_WARNING =>         1,
                                        
                    E_COMPILE_ERROR =>      1,
                                        
                    E_COMPILE_WARNING =>    1,
                                        
                    E_USER_ERROR =>            1,
                                        
                    E_USER_WARNING =>        1,
                                        
                    E_USER_NOTICE =>        1,
                                        
                    E_STRICT =>                1,
                                        
                    E_RECOVERABLE_ERROR =>    1);
                        
                        if(isset(
                    $arrLog[$code]) && $arrLog[$code] == 1
                        {
                            global 
                    $connection;
                            
                    $msg = new msg_vm($connection);
                            
                    $msg->set_subject("FEHLER: ".$code." @ ".$msg_error);
                            
                    $msg->set_user_from(-1);    
                            
                    $msg->set_user_to(2);
                            
                    $msg->set_text("[b]Errorcode:[/b]".$code."<br 
                    />[b]MSG:[/b]"
                    .$msg_error."<br />[b]Datei:[/b]".$file."<br 
                    />[b]Zeile:[/b]"
                    .$line."<br /><br 
                    />[b]User:[/b]"
                    .$_SESSION["user_id"]."<br 
                    />[b]Zeit:[/b]"
                    .date('d.m.Y - H:i'time()));
                            
                    $msg->send(); 
                        
                            
                    $err  "<br /><b>Zeit</b>: " date("d.m.Y - H:i:s"time());
                            
                    $err .= "<br /><b>Fehler</b>: " $code;
                            
                    $err .= "<br /><b>Beschreibung</b>: " $msg_error;
                            
                    $err .= "<br /><b>Datei</b>: " $file;
                            
                    $err .= "<br /><b>Zeile</b>: " $line;
                            
                    $err .= "<br /><b>User</b>:" .$_SESSION["user_id"];
                            
                    $err .= "<br /><b>Beteiligte Vars</b>:<br /><pre> " .print_r($vars,1)."</pre>";        
                            
                             
                    error_log($err3$_SERVER['DOCUMENT_ROOT']."logs/seiten/virtual-meetings/".
                    date("d-m-Y"time()).".txt");
                        }


                    EDIT:
                    Hab grad erst deinen Post mit den Konstanten gesehen...


                    EDIT2: Wenn ich einen bewussten FEhler einbaue (aufruf einer undefinierten funktion), wird dieser nicht geloggt. Liegt das daran, dass PHP das Skript abbricht?
                    Zuletzt geändert von Seggl-hoch-drei; 20.04.2008, 20:42.
                    Tempim.de - Dein kostenloser Bildhoster
                    Tipps und Tricks für Webmaster

                    Kommentar


                    • #11
                      Ich hätte noch ein Frage, welche mir Google nicht beantworten konnte:
                      Wie kann ich PHP dazu bringen, NUR meinen errorhandler zu verwenden und nicht selbst zusätliche Meldungen auszugeben (was es atm bei E_STRICT und E_NOTICE tut)
                      Tempim.de - Dein kostenloser Bildhoster
                      Tipps und Tricks für Webmaster

                      Kommentar


                      • #12
                        display_errors = 0;

                        Kommentar


                        • #13
                          Jo, das hatte ich schon.
                          Aber es lag auch daran, dass im Handler selbst ein Notice verursacht wurde *schäm*
                          Tempim.de - Dein kostenloser Bildhoster
                          Tipps und Tricks für Webmaster

                          Kommentar


                          • #14
                            Wieso werden Fehlermeldung (egal ob auf der Seite oder im Handler) überhaupt auf der Produktivumgebung ausgegeben?

                            Kommentar


                            • #15
                              Naja, der einzige, der da eigentlich rummacht, bin ich.
                              Produktivumgebung kann man das noch nicht nennen.

                              Ich hab jetzt schon so ziemlich die meisten Notices raus, hoffe ich.

                              Nachdem den Schock überstanden habe, als ich gesehen habe, dass all-inkl.com doch tatsächlich register_globals auf on hat....
                              Tempim.de - Dein kostenloser Bildhoster
                              Tipps und Tricks für Webmaster

                              Kommentar

                              Lädt...
                              X