Loggo: wo logged ihr was?

Hi,
mal ne Frage in die Runde: was und wie logged ihr in euren Applikationen? Zur Zeit logge ich (dev und produktiv) nur standardmäßig im php error log.

php.ini
log_errors = On
error_log = /path/to/error.log

ich möchte jetzt aber auch noch Userinput-Fehler mitloggen. Würde sich hier error_log anbieten, oder setzt ihr auf andere Lösungen? Der Vorteil von error_log wäre, soweit ich das beurteilen kann, dass man hier auch gleich mails (zum Beispiel an den admin) versenden kann.

grüße
Loggo

  1. Tach!

    was und wie logged ihr in euren Applikationen? Zur Zeit logge ich (dev und produktiv) nur standardmäßig im php error log.

    Mehr kann man da vermutlich auch nicht allgemein tun (abgesehen vom Webserver-Log). Alles andere braucht schon einen triftigen Grund, à la Anmeldeversuche. Das muss dann aber situationsbedingt entscheiden werden, wo das mitgeschrieben wird. Ein anderer Grund wäre, dass man Funktionsaufrufe zwecks Fehlersuche mitprotokolliert.

    Ein DBMS eignet sich genau dann nicht mehr als Logging-Ziel, wenn man auch loggen will, wenn es grad nicht erreichbar ist. Das Filesystem an sich hat da üblicherweise eine höhere Verfügbarkeit.

    ich möchte jetzt aber auch noch Userinput-Fehler mitloggen. Würde sich hier error_log anbieten, oder setzt ihr auf andere Lösungen? Der Vorteil von error_log wäre, soweit ich das beurteilen kann, dass man hier auch gleich mails (zum Beispiel an den admin) versenden kann.

    Nicht "auch" sondern "entweder oder". Und man muss das Ziel bei jedem Aufruf angeben. Da ist es doch einfacher in der Handhabung, sich eine eigene Funktion zu schreiben, die sowohl als auch zum Ziel haben kann.

    dedlfix.

  2. હેલો

    mal ne Frage in die Runde: was und wie logged ihr in euren Applikationen? Zur Zeit logge ich (dev und produktiv) nur standardmäßig im php error log.

    Was willst du denn mitloggen? Gibt es Probleme mit deinem Script?

    બાય

    --
     .
    ..:
    1. Hi,

      mal ne Frage in die Runde: was und wie logged ihr in euren Applikationen? Zur Zeit logge ich (dev und produktiv) nur standardmäßig im php error log.

      Was willst du denn mitloggen? Gibt es Probleme mit deinem Script?

      na ja, Probleme gibt es ja immer wieder mal. Die DB-Verbindung klappt temporär nicht und wirft eine Exception, eine Datei existiert nicht, obwohl sie existieren sollte, Loginversuche von "Hackern", Felder werden falsch validiert, sowas halt.

      1. Tach!

        Die DB-Verbindung klappt temporär nicht und wirft eine Exception,

        Kann und sollte man abfangen, loggen und/oder dem Admin mailen, und dem Anwender eine Vertröstseite anbieten, die eine Alternative für ihn und sein Ziel darstellt.

        eine Datei existiert nicht, obwohl sie existieren sollte,

        Sollte man auch abgefangen haben.

        Loginversuche von "Hackern", Felder werden falsch validiert, sowas halt.

        Interessiert das großartig? Gut, Unholde hindern, wäre schon ein Ziel. Aber mitmeißeln, wenn jemand was falsch eingibt? Eher nur, um herauszufinden, ob/wie die Anwender mit dem Formular zurechtkommen.

        dedlfix.

        1. hi,

          Die DB-Verbindung klappt temporär nicht und wirft eine Exception,

          Kann und sollte man abfangen, loggen und/oder dem Admin mailen, und dem Anwender eine Vertröstseite anbieten, die eine Alternative für ihn und sein Ziel darstellt.

          genau, sag ich ja. Sowas logge ich mit. Was ich dann mit dem Anwender mache, ist ja nicht Thema des Threads. Kommt ja immer auf die Umgebung an, in die Applikation läuft. Auf Kommandozeile brauche ich nicht auf eine 404-Seite weiterleiten.

          eine Datei existiert nicht, obwohl sie existieren sollte,

          Sollte man auch abgefangen haben.

          Abfangen und meines Erachtens mitloggen. Natürlich nicht dem User die Meldung geben "Sorry, gibts nicht. Exit Baby" sondern Alternativen anbieten. Wenn halt gar nichts mehr geht, dann eben auf 404 von mir aus.

          Loginversuche von "Hackern", Felder werden falsch validiert, sowas halt.

          Interessiert das großartig? Gut, Unholde hindern, wäre schon ein Ziel. Aber mitmeißeln, wenn jemand was falsch eingibt? Eher nur, um herauszufinden, ob/wie die Anwender mit dem Formular zurechtkommen.

          Hm, ja, mir geht es jetzt tatsächlich darum, ob User mit einer Eingabemaske zurechtkommen, weil ich den Fall gerade hatte. Im Grunde aber ein sehr spezieller Fall, gebe ich dir recht. Der "Hacker"-Fall wäre, wenn jemand zigmal versucht, sich (mit der selben IP z.b.) einzuloggen oder sowas. Aber auch eher speziell.

          1. હેલો

            eine Datei existiert nicht, obwohl sie existieren sollte,

            Sollte man auch abgefangen haben.

            Abfangen und meines Erachtens mitloggen. Natürlich nicht dem User die Meldung geben "Sorry, gibts nicht. Exit Baby" sondern Alternativen anbieten. Wenn halt gar nichts mehr geht, dann eben auf 404 von mir aus.

            Wenn eine Datei existiert, aber der Server das bestreitet, stimmt irgendetwas mit dem Server nicht. Wie willst du diesen Fall mit PHP loggen? Abgesehen davon wird das alles ohnehin im access.log des Apachen gespeichert. Sogar alle POST, GET und sonstigen Requests. Mit Statuscode, Method, IP und allem pipapo.

            Wenn eine Ressource nicht existiert, so ist der Status erstmal 404 oder 410, zusätzlich zu diesen Fehlercodes kannst du dem Nutzer Alternativen anbieten, nicht umgekehrt.
            Der Status eines HTTP-Requests wird immer übertragen, du musst Sorge dafür tragen, dass es immer der richtige ist. Wenn etwas nicht da ist, kannst du dafür keinen Status 200 senden, nur weil du „Alternativen“ zur Auswahl hast.

            બાય

            --
             .
            ..:
            1. Hi,

              eine Datei existiert nicht, obwohl sie existieren sollte,

              Sollte man auch abgefangen haben.

              Abfangen und meines Erachtens mitloggen. Natürlich nicht dem User die Meldung geben "Sorry, gibts nicht. Exit Baby" sondern Alternativen anbieten. Wenn halt gar nichts mehr geht, dann eben auf 404 von mir aus.

              Wenn eine Datei existiert, aber der Server das bestreitet, stimmt irgendetwas mit dem Server nicht. Wie willst du diesen Fall mit PHP loggen? Abgesehen davon wird das alles ohnehin im access.log des Apachen gespeichert. Sogar alle POST, GET und sonstigen Requests. Mit Statuscode, Method, IP und allem pipapo.

              Nicht auf Kommandozeile. Wenn eine Datei im Dateisystem nicht da ist, was ja durchaus passieren kann, zb. irgendwo ein Download nicht geklappt, dann wird abgefangen, dass diese Datei nicht existiert. => Log und Fehler. Man könnte hier als Alternative zum Beispiel eine backup-Datei aufrufen.

              Wenn eine Ressource nicht existiert, so ist der Status erstmal 404 oder 410, zusätzlich zu diesen Fehlercodes kannst du dem Nutzer Alternativen anbieten, nicht umgekehrt.

              du redest von http. Ich rede allgemein von PHP. Da gibt es nicht zwingend http-Requests bzw. responses und deren statuscodes.

              Der Status eines HTTP-Requests wird immer übertragen, du musst Sorge dafür tragen, dass es immer der richtige ist. Wenn etwas nicht da ist, kannst du dafür keinen Status 200 senden, nur weil du „Alternativen“ zur Auswahl hast.

              ich meinte eher Dateien, die irgendwas zur Verfügung stellen, z.b. eine Textdatei mit Produktdaten. Wenn in meiner Applikation diese Datei nicht da ist (siehe oben), muss ich (der Software bzw. dem User) eine Alternative anbieten oder das Programm beenden lassen.

  3. Hi,
    mal ne Frage in die Runde: was und wie logged ihr in euren Applikationen? Zur Zeit logge ich (dev und produktiv) nur standardmäßig im php error log.

    Ich logge noch Slow-Queries, die länger als (ich glaube) 3 Sekunden brauchen. Ist ganz sinnvoll, damit man die ausmisten kann.

    Ich logge alle Fehlermeldungen (fast ausnahmslos mit Ursache), die der User erhält. Das hilft mir dann bei der eventuellen Fehlersuche.

    Ich logge alle Fehlanmeldeversuche.

    Lukas

    1. Tach!

      Ich logge alle Fehlermeldungen (fast ausnahmslos mit Ursache), die der User erhält. Das hilft mir dann bei der eventuellen Fehlersuche.

      Bekommt der User bei dir Fehlermeldungen zu sehen, für die er ursächlich gar nichts kann (z.B. Datenbankverbindungsfehler)?

      dedlfix.

      1. Bekommt der User bei dir Fehlermeldungen zu sehen, für die er ursächlich gar nichts kann (z.B. Datenbankverbindungsfehler)?

        Ja, bekommt er. Natürlich nicht den wirklichen Fehler, sondern eine allgemeine Meldung ala "Es ist ein Fehler aufgetreten, bitte benachrichtigen Sie den Systemadministrator". Natürlich bekomme ich einen solchen Fehler auch per mail nochmal vom System selber.

        Ich schließe aus Deiner Frage hiernach, daß Du einen besseren Vorschlag hast?

        Lukas

        1. હેલો

          Ich schließe aus Deiner Frage hiernach, daß Du einen besseren Vorschlag hast?

          Programme schreiben, die keine Fehler produzieren?

          બાય

          --
           .
          ..:
          1. Ich schließe aus Deiner Frage hiernach, daß Du einen besseren Vorschlag hast?

            Programme schreiben, die keine Fehler produzieren?

            Die Programme produzieren ohnehin keine Fehler. Wußtest Du das nicht?

            Lukas

            1. હેલો

              Programme schreiben, die keine Fehler produzieren?

              Die Programme produzieren ohnehin keine Fehler. Wußtest Du das nicht?

              Anscheinend ja doch. Jedenfalls hat sich dein Post so gelesen. Und nein, wissen kann ich sowas nicht, woher denn auch?

              બાય

              --
               .
              ..:
              1. Anscheinend ja doch.

                Niemals.

                Jedenfalls hat sich dein Post so gelesen. Und nein, wissen kann ich sowas nicht, woher denn auch?

                Ja Mann, dann frag doch. Reißt Dir doch keiner den Kopf hier ab.
                Na ok, ich wills Dir mal erklären. Programme verarbeiten nur das Futter, was sie von Dir zum fressen bekommen. Springt dabei eine Fehlermeldung heraus, hat das Programm alles richtig gemacht. Sprich, keinen Fehler produziert. Jeder mögliche Bug hat ganz am Ende der Kette einen Menschen, der einen Fehler gemacht hat. Selbst ein sich verrechnender Prozessor wird am Ende des Tages einen Menschen sitzen haben, der dazu etwas falsch gemacht hat.

                Lukas

                1. હેલો

                  Ja Mann, dann frag doch. Reißt Dir doch keiner den Kopf hier ab.

                  Ach was? Ehrlich? Ich dachte immer, die Leute im SELFForum sind gemeine, Rachsüchtige Nerds, die nur auf eine Gelegenheit warten, jemandem den Kopf abzureissen?

                  Na ok, ich wills Dir mal erklären. Programme verarbeiten nur das Futter, was sie von Dir zum fressen bekommen. Springt dabei eine Fehlermeldung heraus, hat das Programm alles richtig gemacht.

                  Du verwechselst hier gerade einen Fehler im Programm mit Fehlern bei Usereingaben.

                  Wenn ich beim Login ein Falsches Passwort/Benutzername eingebe, ist das aus deiner Sicht ein Fehler? Ist ein Error 404 ein Fehler, den du mitloggst?

                  બાય

                  --
                   .
                  ..:
                  1. Du verwechselst hier gerade einen Fehler im Programm mit Fehlern bei Usereingaben.

                    Nope.

                    Wenn ich beim Login ein Falsches Passwort/Benutzername eingebe, ist das aus deiner Sicht ein Fehler? Ist ein Error 404 ein Fehler, den du mitloggst?

                    2x Nope.

                    Nochmal, Programme produzieren keine Fehler! Sie geben maximal Programmiererfehler Und / oder Userfehler aus. Wenn sie das aber tun, haben sie selber Keinen Fehler produziert. Darum geht es.

                    Lukas

                    1. હેલો

                      Sie geben maximal Programmiererfehler Und / oder Userfehler aus. Wenn sie das aber tun, haben sie selber Keinen Fehler produziert. Darum geht es.

                      Warum willst du Fehleingaben eines Users mitloggen? Fehler im Script, die der Programmierer einbaut, sind klar (allerdings, wenn diese behoben sind, sollte auch das Logging deaktiviert werden). Aber Fehleingaben seitens eines gewöhnlichen Users?

                      બાય

                      --
                       .
                      ..:
                      1. hi,

                        Sie geben maximal Programmiererfehler Und / oder Userfehler aus. Wenn sie das aber tun, haben sie selber Keinen Fehler produziert. Darum geht es.

                        Warum willst du Fehleingaben eines Users mitloggen? Fehler im Script, die der Programmierer einbaut, sind klar (allerdings, wenn diese behoben sind, sollte auch das Logging deaktiviert werden). Aber Fehleingaben seitens eines gewöhnlichen Users?

                        vielleicht, wenn einer 1000 mal das Captcha nicht löst oder so... oder halt aus Usability-Gründen, wie die Leute mit dem Formular zu rechtkommen. Ob es zuviele Fehlversuche gibt, das Formular mit gültigen Werten abzuschicken. Ich hatte da neulich so einen Fall: 4-seitiges Formular, in das plausible, numerische Werte eingetragen werden mussten.

                      2. હેલો

                        Sie geben maximal Programmiererfehler Und / oder Userfehler aus. Wenn sie das aber tun, haben sie selber Keinen Fehler produziert. Darum geht es.

                        Warum willst du Fehleingaben eines Users mitloggen? Fehler im Script, die der Programmierer einbaut, sind klar (allerdings, wenn diese behoben sind, sollte auch das Logging deaktiviert werden). Aber Fehleingaben seitens eines gewöhnlichen Users?

                        બાય

                        Es scheint Dir etwas schweren fallen, Deinen Denkfehler Zuzugeben:-) Geschenkt, reden wir Über das Thread Thema

                        Programmierfehler hoffen sind wir also einig. Nach dem Beheben ausschalten leuchtet mir mal wieder gar nicht ein. Rein Programmiertechnisch sieht das doch so aus: Wenn Bedingung für Fehler erfüllt, dann Log und Mail. Wenn nicht erfüllt, dann nix! Was also sollte ich ausschalten? Im Gegenteil: Es kann vorkommen, daß der Fehler behoben scheint, es aber unter bestimmten Vorraussetzungen doch nicht ist. Dann Sin ich froh wenn ich nichts angeschaltet habe!

                        Was User -Fehleingaben angeht, da logge ich nur Vergebliche Einlogversuche| um eventuelle Hackattacken frühzeitig zu erkennen. Man sieht sehr schnell, ob es ein Vertipper war oder nicht.

                        Lukas

        2. Tach!

          Bekommt der User bei dir Fehlermeldungen zu sehen, für die er ursächlich gar nichts kann (z.B. Datenbankverbindungsfehler)?
          Ja, bekommt er. Natürlich nicht den wirklichen Fehler, sondern eine allgemeine Meldung ala "Es ist ein Fehler aufgetreten, bitte benachrichtigen Sie den Systemadministrator". Natürlich bekomme ich einen solchen Fehler auch per mail nochmal vom System selber.
          Ich schließe aus Deiner Frage hiernach, daß Du einen besseren Vorschlag hast?

          Warum sollte der Anwender den Sysadmin benachrichtigen? Ein ordentlicher Sysadmin sollte selbst wissen, wenn seine Schäfchen Probleme machen - und das möglichst vorher. Und in deinem Fall wirst du ja bereits vom System selbst verständigt.

          Es gibt jedenfalls kein Patentrezept für alle Fälle, aber wenn man im Fehlerfall etwas für den Anwender tun möchte, dann sollte man sich mal an seine Stelle setzen und herausfinden, was ihm in dem Fall nützen könnte. Allzugern wird da nur aus der Programmierer-/Adminbrille geschaut. Bestellvorgang klappt nicht? "Sysadmin benachrichtigen" wäre da zum Beispiel nicht so passend, selbst wenn dessen Email-Adresse oder ein Kontaktformular zur Verfügung gestellt wird. Der Anwender wird in den seltensten Fällen etwas brauchbareres als "geht nicht" reinschreiben. Besser wäre, den Warenkorb anderweitig zu speichern, damit der Kunde und seine Bestellung nicht verloren geht.

          dedlfix.

          1. Es gibt jedenfalls kein Patentrezept für alle Fälle, aber wenn man im Fehlerfall etwas für den Anwender tun möchte, dann sollte man sich mal an seine Stelle setzen und herausfinden, was ihm in dem Fall nützen könnte. Allzugern wird da nur aus der Programmierer-/Adminbrille geschaut.

            In meinem Fall nützt dem User bei Vorkommen des Fehlers eigentlich gar nichts wirklich weiter. Es geht also bktich nur darum, dem User an dieser Stelle einen Fehlerhinweis zu geben. 'Da könnte wer weiß was drin stehen. Letztlich muß Ich an dieser Stelle ran, uhwbhäyrj davon, ob mir der User oder das System selber den Fehler meldet. Und So ähnlich drückt Auch meine Fehlermeldung dem User das aus.

            Ganz witzig das Samsung Note hat fast den kompletten Beitrag in Sachen Handschriften Erkennung fehlerlos umgesetzt. Gar nicht mal so schlecht, Und das bei meiner Handschrift,

            Lukas

  4. Hi,

    mal ne Frage in die Runde: was und wie logged ihr in euren Applikationen?

    Ich würde das mit demjenigen klären, der bereit ist, sich um Logs zu kümmern ;)

    Horst Pumpa

    PS: Ne im Ernst, wenn sich keiner um die Logs kümmert, macht Loggen überhaupt keinen Sinn. Richte Deine Entwicklungsumgebung so ein, dass Fehler bereits beim Entwickeln sofort bemerkt werden. D.h., Fehlerbehandlung ist Sache der Anwendung und nicht Sache der Log-Auswertung.

  5. Moin!

    ich möchte jetzt aber auch noch Userinput-Fehler mitloggen. Würde sich hier error_log anbieten, oder setzt ihr auf andere Lösungen? Der Vorteil von error_log wäre, soweit ich das beurteilen kann, dass man hier auch gleich mails (zum Beispiel an den admin) versenden kann.

    Logging ist durchaus eine komplexe Angelegenheit. Denn es treffen hierbei ziemlich viele Aspekte aufeinander, die alle vernünftig geklärt werden wollen:

    1. Was wird geloggt? Das kann nur der Code beantworten und ausführen, der eine Logmeldung loswerden will. Allerdings ist hierbei auch gleich die Frage zu stellen, ob man später eine Trennung nach Wichtigkeit der Meldung durchführen will. Also kommt zusätzlich zum tatsächlichen Meldungstext (fester String) oder zur Variablen (die lieber nicht sofort in einen String wandeln) auch noch eine eventuell recht umfangreiche Sammlung von Metadaten hinzu: Woher kommt die Meldung, wie wichtig ist sie (Log-Level Debug, Info, Warning, Error,...), was ist evtl. der Kontext (welche Applikation, welcher Zustand)?

    2. Wohin wird geloggt? Der simpelste Fall: In eine Datei. Aber alles nur in EINE Datei zu schreiben kann schnell unübersichtlich werden. Also wird man eventuell je nach Quelle, Wichtigkeit oder Kontext separate Dateien haben wollen. Oder Mails verschicken. Oder auf Syslog schreiben. Oder in eine Datenbank.

    3. Was wird wohin geloggt? Die Verbindung zwischen Punkt 1 (was) und 2 (wohin) könnte man als Logmeldungs-Routing bezeichnen.

    Zum Glück gibt es für solche Probleme bereits existierende Lösungen - und ich würde immer dazu raten, sich bei diesem Problem nicht noch mal selbst an die Umsetzung einer eigenen Lösung zu machen.

    Mein persönlicher Favorit ist Log4PHP. Technisch leider derzeit noch auf PHP-5.2-Niveau (also keine Namespaces etc.), aber funktional ganz vorne mit dabei. Kann von simpel bis Enterprise-Niveau.

    Alternativen sind Monolog, Zend_Log (Version 1.12.*), Zend\Log (Version 2.*), und vermutlich noch zehn weitere, die mir nicht bekannt sind.

    Alle genannten Varianten sind mit Composer installierbar.

    - Sven Rautenberg