Question

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

Était-ce utile?

La solution

J'aime vraiment log4php pour l'exploitation forestière, même s'il n'est pas encore sorti de l'incubateur.J'utilise log4net dans à peu près tout et j'ai trouvé le style assez naturel pour moi.

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

Autres conseils

Vous pourriez utiliser set_error_handler pour définir une exception personnalisée pour enregistrer vos erreurs.J'envisagerais personnellement de les stocker dans la base de données, car la trace du gestionnaire d'exceptions par défaut peut fournir des informations sur la cause - 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 journal_erreur pour enregistrer vos erreurs.Il propose un choix de destinations de messages, notamment :

Cité de journal_erreur

  1. L'enregistreur système de PHP, utilisant le mécanisme de journalisation système du système d'exploitation ou un fichier, en fonction de la valeur de la directive de configuration error_log.Ceci est l'option par défaut.
  2. Envoyé par email à l'adresse indiquée dans le paramètre 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 du message.

Modifier:Markdown a-t-il une balise noparse pour les traits de soulignement ?

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 souhaitez montrer à l'utilisateur un bel écran indiquant "Désolé, nous avons fait une gaffe.Les ingénieurs ont été prévenus.Revenez en arrière et réessayez" et ABSOLUMENT AUCUN DÉTAIL TECHNIQUE, car cela constituerait un risque pour la 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 examen ultérieur.Ce serait une bonne pratique.

Je les écrirais dans un fichier - et peut-être mettrais en place un système de surveillance pour vérifier les modifications apportées à la taille du fichier ou à la date de dernière modification.Webmin est un moyen simple, mais il existe des solutions logicielles plus complètes.

Si vous savez qu’il s’agit d’une erreur ponctuelle, envoyer un avis par courrier électronique peut convenir.Cependant, avec un site Web ayant de nombreuses visites par minute, ne jamais envoyez une notification par e-mail.J'ai vu un site Web détruit par la génération de centaines d'e-mails par minute indiquant que le système ne pouvait pas se connecter à la base de données.Le fait qu'il ait également un LoadAvg > 200 en raison du serveur de messagerie exécuté pour chaque nouveau message n'a pas aidé du tout.Dans ce cas, le meilleur scénario était, de loin, que le chien de garde vérifie la taille des fichiers et se connecte à un service externe pour envoyer un SMS (peut-être un message instantané), ou qu'un système externe recherche sur une page Web un message d'erreur (qui ne doit pas nécessairement être visible à l'écran - cela peut l'être dans un commentaire HTML).

Je pense que cela dépend en grande partie de l'endroit où votre erreur s'est produite.Si la base de données est en panne, l'enregistrer dans la base de données n'est pas une bonne idée ;)

Je utilise l journal système() fonction pour enregistrer l'erreur, mais je n'ai aucun problème à l'écrire dans un fichier lorsque je suis sur un système qui n'a pas de support syslog.Vous pouvez facilement configurer votre système pour qu'il vous envoie un e-mail ou un message Jabber en utilisant par exemple journal de surveillance ou le syslogd standard.

J'appuie log4php.Je l'ai généralement configuré pour envoyer des éléments tels que des exceptions à ERROR ou CRITITCAL et les écrire dans Syslog.À partir de là, vous pouvez alimenter votre syslog Zénoss, Nagios, Splunk ou tout ce à quoi syslog peut parler.

Vous pouvez également détecter et enregistrer les exceptions PHP à l'aide de Google Forms.Il y a un tutoriel ici cela explique le processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top