Frage

Ich habe herausgefunden, wie man Fehler in Ausnahmen umwandelt, und ich zeige sie gut an, wenn sie nicht abgefangen werden, aber ich weiß nicht, wie ich sie sinnvoll protokollieren kann.Sie einfach in eine Datei zu schreiben, wäre doch nicht sinnvoll, oder?Und würden Sie das Risiko eingehen, auf eine Datenbank zuzugreifen, wenn Sie noch nicht wissen, was die Ausnahme verursacht hat?

War es hilfreich?

Lösung

ich mag wirklich log4php zum Abholzen, auch wenn es noch nicht aus dem Inkubator ist.Ich verwende log4net in fast allem und finde den Stil für mich ganz natürlich.

Im Hinblick auf Systemabstürze können Sie den Fehler an mehreren Zielen protokollieren (z. B. Appender haben, deren Schwellenwert KRITISCH oder FEHLER ist und die nur ins Spiel kommen, wenn etwas schief geht).Ich bin mir nicht sicher, wie ausfallsicher die vorhandenen Appender sind – wenn die Datenbank ausfällt, wie kann dieser Appender dann ausfallen? –, aber Sie könnten ganz einfach Ihren eigenen Appender schreiben, der ordnungsgemäß ausfällt, wenn er nicht protokollieren kann.

Andere Tipps

Du könntest benutzen set_error_handler um eine benutzerdefinierte Ausnahme zum Protokollieren Ihrer Fehler festzulegen.Ich persönlich würde darüber nachdenken, sie in der Datenbank zu speichern, da der Backtrace des standardmäßigen Ausnahmehandlers Informationen darüber liefern kann, was die Ausnahme verursacht hat. Dies ist jedoch natürlich nicht möglich, wenn der Datenbankhandler die Ausnahme ausgelöst hat.

Sie könnten auch verwenden Fehlerprotokoll um Ihre Fehler zu protokollieren.Es stehen verschiedene Nachrichtenziele zur Auswahl, darunter:

Zitiert aus Fehlerprotokoll

  1. Der System-Logger von PHP, der den Systemprotokollierungsmechanismus des Betriebssystems oder eine Datei verwendet, je nachdem, worauf die Konfigurationsanweisung „error_log“ eingestellt ist.Dies ist die Standardoption.
  2. Wird per E-Mail an die Adresse im Zielparameter gesendet.Dies ist der einzige Nachrichtentyp, bei dem der vierte Parameter, extra_headers, verwendet wird.
  3. Wird an das Dateiziel angehängt.Am Ende der Nachrichtenzeichenfolge wird nicht automatisch eine neue Zeile hinzugefügt.

Bearbeiten:Verfügt Markdown über ein Noparse-Tag für Unterstriche?

Sie einfach in eine Datei zu schreiben, wäre doch nicht sinnvoll, oder?

Aber natürlich ist es das – das ist eine tolle Sache, viel besser, als sie auf dem Bildschirm anzuzeigen.Sie möchten dem Benutzer einen schönen Bildschirm mit der Meldung „Entschuldigung, wir haben einen Fehler gemacht“ zeigen.Ingenieure wurden benachrichtigt.Gehen Sie zurück und versuchen Sie es erneut“ und KEINE TECHNISCHEN DETAILS, da dies ein Sicherheitsrisiko darstellen würde.Sie können eine E-Mail an ein freigegebenes Postfach senden und die Ausnahme zur späteren Überprüfung in einer Datei oder Datenbank protokollieren.Dies wäre eine Best Practice.

Ich würde sie in eine Datei schreiben – und vielleicht ein Überwachungssystem einrichten, um nach Änderungen an der Dateigröße oder dem Datum der letzten Änderung zu suchen.Webmin ist eine einfache Möglichkeit, es gibt jedoch umfassendere Softwarelösungen.

Wenn Sie wissen, dass es sich um einen einmaligen Fehler handelt, kann es in Ordnung sein, eine Benachrichtigung per E-Mail zu senden.Bei einer Website mit vielen Zugriffen pro Minute sollten Sie dies jedoch nicht tun immer eine Benachrichtigung per E-Mail senden.Ich habe erlebt, wie eine Website abstürzte, weil Hunderte von E-Mails pro Minute generiert wurden, die besagten, dass das System keine Verbindung zur Datenbank herstellen konnte.Die Tatsache, dass es auch einen LoadAvg von > 200 hatte, weil der Mailserver für jede neue Nachricht ausgeführt wurde, half überhaupt nicht.In diesem Fall war das bei weitem beste Szenario, dass der Watchdog die Dateigröße überprüft und sich mit einem externen Dienst verbindet, um eine SMS (vielleicht eine IM) zu senden, oder dass ein externes System auf einer Webseite nach einer Fehlermeldung sucht (was muss nicht auf dem Bildschirm sichtbar sein, sondern kann in einem HTML-Kommentar enthalten sein.

Ich denke, es hängt stark davon ab, wo Ihr Fehler aufgetreten ist.Wenn die Datenbank heruntergefahren ist, ist es keine gute Idee, sie in der Datenbank zu protokollieren ;)

Ich verwende das syslog() Funktion zum Protokollieren des Fehlers, aber ich habe keine Probleme, ihn in eine Datei zu schreiben, wenn ich auf einem System bin, das keine Syslog-Unterstützung hat.Sie können Ihr System ganz einfach so einrichten, dass es Ihnen beispielsweise eine E-Mail oder eine Jabber-Nachricht sendet Logwatch oder das Standard-Syslogd.

Ich zweite log4php.Normalerweise habe ich es so konfiguriert, dass Dinge wie Ausnahmen an ERROR oder CRITITCAL gesendet und in Syslog geschrieben werden.Von dort aus können Sie Ihr Syslog einspeisen Zenoss, Nagios, Splunk oder irgendetwas anderes, mit dem Syslog kommunizieren kann.

Sie können PHP-Ausnahmen auch mithilfe von Google Forms abfangen und aufzeichnen.Es gibt ein Tutorial Hier das erklärt den Vorgang.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top