warning - Comment enregistrer des exceptions non interceptées en PHP?




try catch php pdo (5)

J'ai découvert comment convertir les erreurs en exceptions, et je les affiche bien si elles ne sont pas attrapées, mais je ne sais pas comment les enregistrer d'une manière utile. Les écrire simplement dans un fichier ne sera pas utile, n'est-ce pas? Et risquez-vous d'accéder à une base de données, alors que vous ne savez pas encore ce qui a provoqué l'exception?


Vous pouvez également capturer et enregistrer des exceptions PHP à l'aide de Google Forms. Il y a un tutoriel ici qui explique le processus.


Les écrire simplement dans un fichier ne sera pas utile, n'est-ce pas?

Mais bien sûr, c'est une bonne chose à faire, bien mieux que de les afficher à l'écran. Vous voulez montrer à l'utilisateur un joli écran qui dit «Désolé, nous avons fait une gaffe, les ingénieurs ont été avertis, revenez et essayez à nouveau» et ABSOLUMENT AUCUN DÉTAIL TECHNIQUE, car cela constituerait un risque de sécurité. Vous pouvez envoyer un e-mail à une boîte aux lettres partagée et enregistrer l'exception dans un fichier ou une base de données pour une révision ultérieure. Ce serait une bonne pratique.


Vous pouvez utiliser set_error_handler pour définir une exception personnalisée pour consigner vos erreurs. Personnellement, je pense à les stocker dans la base de données, car le backtrace du gestionnaire d'exceptions par défaut peut fournir des informations sur les causes de ce problème. Cela ne sera bien sûr pas possible si le gestionnaire de base de données a déclenché l'exception.

Vous pouvez également utiliser error_log pour enregistrer vos erreurs. Il a un choix de destinations de message comprenant:

Cité à partir de error_log

  1. Enregistreur système de PHP, en utilisant le mécanisme de journalisation du système d'exploitation ou un fichier, en fonction de la définition de la directive de configuration error_log. Ceci est l'option par défaut.
  2. Envoyé par courrier électronique à l'adresse du paramètre de destination. C'est le seul type de message où le quatrième paramètre, extra_headers est utilisé.
  3. Ajouté à la destination du fichier. Une nouvelle ligne n'est pas automatiquement ajoutée à la fin de la chaîne de message.

Edit: Est-ce que markdown a un tag noparse pour les underscores?


Je deuxième log4php. Je l'ai généralement configuré pour envoyer des choses comme des exceptions à ERROR ou CRITITCAL et les faire écrire dans syslog. De là, vous pouvez avoir votre flux syslog dans Zenoss , Nagios , Splunk ou toute autre chose à laquelle syslog peut parler.


J'aime vraiment log4php pour la journalisation, même s'il n'est pas encore sorti de l'incubateur. J'utilise log4net dans presque tout, et j'ai trouvé le style assez naturel pour moi.

En ce qui concerne les pannes de système, vous pouvez enregistrer l'erreur à plusieurs destinations (par exemple, avoir des appenders dont le seuil est CRITIQUE ou ERREUR qui entrent en jeu lorsque les choses tournent mal). Je ne suis pas sûr de la sécurité des applicateurs existants - si la base de données est en panne, comment cet appateur échoue - mais vous pouvez facilement écrire votre propre appender qui échouera gracieusement s'il est incapable de se connecter.







error-logging