Comment enregistrer nos propres messages d'erreur (par exemple: erreur due à une entrée de date d'utilisateur non valide) qui est générée dans le programme php dans drupal log error .
Vous pouvez utiliser la fonction watchdog
:
watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)
Citant le manuel, les paramètres sont les suivants:
$type
La catégorie à laquelle ce message appartient.$message
Le message à stocker dans le journal.$variables
Tableau de variables à remplacer dans le message affiché ou NULL si le message est déjà traduit ou s'il est impossible de le traduire.$severity
La gravité du message, conformément à la RFC 3164$link
Un lien à associer au message.Et les niveaux d'erreur peuvent être trouvés sur la page de watchdog_severity_levels
. Pour une erreur, vous utiliserez très probablement WATCHDOG_ERROR
, ou même quelque chose de plus "critique", selon le type d'erreur.
Drupal 8
// Logs a notice
\Drupal::logger('my_module')->notice($message);
// Logs an error
\Drupal::logger('my_module')->error($message);
Voir plus d'exemples sur Comment enregistrer des messages dans Drupal 8 .
1) En effet, watchdog est un moyen standard d’enregistrer ses propres erreurs PHP.
2) Alternativement, si vous avez besoin de voir immédiatement les messages d'erreur lors du débogage de vos pages Drupal, vous voudrez peut-être les voir consignés/imprimés à la page correspondante - dans la console FireBug . C'est parfois très pratique lorsque vous voyez la page journaux juste à temps liés . Cela nécessite - Devel module, Firebug extension à FireFox et éventuellement Firephp .
Vous pouvez utiliser la fonction dfb () pour écrire des messages de journal directement dans la console générale Firebug.
dfb($input, $label = NULL)
Si vous souhaitez conserver vos messages de journal liés à Drupal en dehors de la console Firebug normale, vous pouvez écrire des messages dans Drupal pour Firebug log avec la fonction firep ():
firep($item, $optional_title)
Watchdog est la solution idéale pour un système de production, mais lors du débogage, je trouve la fonction drupal_set_message
utile.
Il affiche le message à l'écran où les messages de type "Opération réussie" sont normalement affichés (assurez-vous donc de les supprimer avant de rendre le site Live).
Dans drupal 7, nous pouvons enregistrer un message en appliquant la méthode suivante:
fonction de surveillance drupal que nous pouvons utiliser pour consigner un message dans une base de données, assurez-vous que nous avons activé le module principal facultatif pour la consignation de base de données dans/admin/build/modules.
watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)
$ type: La catégorie à laquelle ce message appartient, Exemple: PHP, cron .., nous pouvons filtrer le message par type.
$ message: Le message à stocker dans le journal, Exemple: "Le module suivant est manquant dans le système de fichiers: security_review"
$ variables: Tableau de variables à remplacer dans le message affiché ou NULL si le message est déjà traduit ou s'il est impossible de le traduire . pour que le message soit traduit, ne transmettez pas les variables de valeur dynamique dans le le message doit être ajouté en utilisant des chaînes de caractères génériques.
Exemple: Watchdog ('cg_volunteer', 'cg dans form_alter% formly', array ('% formly' => $ form ['# id']), WATCHDOG_NOTICE, $ link = NULL);
$ severity La gravité du message, les journaux peuvent être filtrés par gravité conformément à la RFC 3164. Les valeurs possibles sont WATCHDOG_ERROR, WATCHDOG_WARNING, etc. . Pour plus d'exemples, voir https: // api. drupal.org/api/drupal/includes!bootstrap.inc/function/watchdog/7.x
$ link: Un lien à associer au message.
Exemple
// pour les avis de journalisation
watchdog('my_module', $message, array());
// pour erreur de journalisation
watchdog('my_module', $message, array(), WATCHDOG_ERROR);
Dans Drupal 8, nous avons utilisé la méthode suivante:
// For Enregistre un avis.
\Drupal::logger('my_module')->notice($message);
// For Enregistre une erreur.
\Drupal::logger('my_module')->error($message);
// Pour Alert, des actions doivent être entreprises immédiatement.
\Drupal::logger('my_module')->alert($message);
// Pour un message critique.
\Drupal::logger('my_module')->critical($message);
// Pour les messages de niveau débogage.
\Drupal::logger('my_module')->debug($message);
// En cas d'urgence, le système est inutilisable.
\Drupal::logger('my_module')->emergency($message);
// pour avertissement
\Drupal::logger('my_module')->warning($message);
// Pour les messages d'information.
\Drupal::logger('my_module')->info($message);
De plus, pour traduire, nous ne devrions pas utiliser la fonction t().
\Drupal::logger('my_module')->alert('Message from @module: @message.', [
'@module' => $module,
'@message' => $message,
]);
cela sera traduit au moment de l'exécution.
Exemple :
\Drupal::logger('content_entity_example')->notice('@type: deleted %title.',
array(
'@type' => $this->entity->bundle(),
'%title' => $this->entity->label(),
));
watchdog
pour D7 et \Drupal::logger
pour D8 écriront une table de connexion watchdog
(dans votre base de données), et avec HUGE data journalisé, vous pouvez imaginer un impact sur les performances.
Vous pouvez utiliser la fonction error_log
php pour le faire (voir PHP manual ).
error_log("Your message", 3, "/path/to/your/log/file.log");
Vous devez avoir la permission d'écrire dans votre fichier journal (
/path/to/your/log/file.log
)
// Get logger factory.
$logger = \Drupal::service('logger.factory');
// Log a message with dynamic variables.
$nodeType = 'Article';
$userName = 'Admin';
$logger->get($moduleName)->notice('A new "@nodeType" created by %userName.', [
'@nodeType' => $nodeType,
'%userName' => $userName,
]);