web-dev-qa-db-fra.com

Comment enregistrer des actions de plugin (cron)?

Existe-t-il un moyen recommandé de consigner (en échec) les actions cron à partir de votre plugin? Par exemple, j'ai un plugin qui se synchronise avec un service externe toutes les heures. Je souhaite enregistrer les modifications apportées, mais également lorsque la synchronisation a échoué. Que recommanderiez-vous ici? Une nouvelle table de base de données? Le Log Observations déconseillées plugin le fait avec un type de publication personnalisé, mais cela risque d’être trop lourd? Je crois/ WordPress ne vient pas avec un package de journalisation standard ?

6
Jan Fabry
  1. Utilisez un fichier pour écrire les événements. Il y a plusieurs inconvénients ici;

    • Permissions du système de fichiers. Lorsque vous déploierez votre application, vous devrez veiller à ne pas donner l'autorisation au serveur Web d'écrire dans le fichier. Et pour être encore plus sûr, vous devrez écrire du code permettant de vérifier si vous le pouvez. écrivez dans le fichier et émettez un avertissement lorsque vous ne le pouvez pas, ce qui ajoute à la complexité et peut causer des problèmes de déploiement.
    • Suppression accidentelle. Vous pourriez supprimer accidentellement le fichier journal personnalisé et perdre vos enregistrements. Cela pourrait être gênant.
    • Custom logformat. Vous devez créer un format de texte personnalisé (lisible par une machine?) Pour écrire les événements dans votre fichier. Lorsque vous devez modifier le format du journal, il n'existe aucun moyen pratique de migrer d'anciens enregistrements. Lorsque vous souhaitez effectuer une analyse sur les journaux, vous devez analyser les enregistrements, ce qui conduit à davantage de code et à une complexité accrue. La complexité est mauvaise.
  2. Utilise une table de base de données . Créez votre propre table de base de données et enregistrez les événements à cet endroit. Aucun des inconvénients énumérés ci-dessus ne s'applique. Cela n'ajoute pas beaucoup de complexité. Automatisez la création et la suppression de la table à l'aide d'un crochet de plug-in et vous disposez d'un système de journalisation raisonnablement fiable, je pense.

  3. Envoyer un e-mail . Selon la pertinence des journaux, vous pouvez toujours opter pour cette méthode. Je suppose que vous voudrez probablement envoyer un e-mail en cas d'échec de toute façon.

  4. Utilise l’enregistreur de système d’exploitation . Lorsque vous utilisez la fonction syslog en PHP, vous pouvez écrire des événements dans le consignateur du système (syslog sous Unix, Event Log sous Windows NT). La configuration d'un syslog défini par l'utilisateur complique le déploiement.

Finalement; vous devriez considérer si vous voulez enregistrer le cas normal etexceptions, ou seulement des exceptions. Jeff Atwood a fait un bon write up à ce sujet.

J'espère que cela t'aides!

6
Wietse Venema

Utilisez une fonction de journalisation telle que this pour qu’elle enregistre votre déconnexion sur debug.log en configurant votre fichier wp-config.php avec les éléments suivants que j’ai trouvés ici :

/**
 * This will log all errors notices and warnings to a file called debug.log in
 * wp-content (if Apache does not have write permission, you may need to create
 * the file first and set the appropriate permissions (i.e. use 666) ) 
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

Cela devrait fonctionner au moins pour le débogage/le développement (je ne suis pas sûr de ce que ce serait formidable pour la journalisation de la production, mais cela fonctionne pour le développement.)

6
leeand00

Je conviens que le fait de placer ces données dans wp_posts pourrait potentiellement faire grossir rapidement la table et la rendre ingérable. C'est bien de créer une table. Je ferais un effort supplémentaire et donnerais à quelqu'un un moyen de nettoyer la table des journaux au cas où ils cesseraient d'utiliser leur plug-in.

Je n'ai pas peur des plugins qui créent des tables, mais c'est peut-être parce que j'ai vu des bases de données WordPress avec 8 000 000 wp_term_relationships enregistrements et 300 000 publications et je sais à quel point cette expérience peut être désagréable.

dbDelta() et register_activation_hook() seront vos amis, ici. Voir Créer des tables avec des plugins .

2
Annika Backstrom