Comment enregistrer un message d'erreur dans drupal

comment enregistrer nos propres messages d'erreur (par exemple: erreur due à l'entrée de date d'utilisateur invalide) qui est généré dans php programme à drupal erreur log .

33
demandé sur ArK 2009-11-10 08:36:39

7 réponses

vous pouvez utiliser la watchdog fonction :

watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)

citant le manuel, les paramètres sont:

  • $type la catégorie à laquelle appartient ce message.
  • $message le message à conserver dans le journal.
  • $variables tableau de variables à remplacer dans le message affiché ou nul si le message est déjà traduit ou impossible traduire.
  • $severity La gravité du message, comme par RFC 3164
  • $link un lien à associer avec le message.

et les niveaux d'erreur peuvent être trouvés sur la page de watchdog_severity_levels . Pour une erreur, vous utiliserez probablement WATCHDOG_ERROR , ou peut-être même quelque chose de plus" critique", selon le type d'erreur.

46
répondu Pascal MARTIN 2009-11-10 05:45:15

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 pendant le débogage de vos pages Drupal, vous pouvez vouloir les voir journalisées/imprimées directement à la page correspondante - dans la console FireBug. Parfois, c'est très pratique lorsque vous pouvez voir les journaux juste-à-temps liés à la page. Cela nécessite - développer module, Firebug extension à FireFox et éventuellement Firephp .

vous pouvez utiliser la fonction dfb() pour écrire des messages log directement sur la console générale Firebug.

dfb($input, $label = NULL)

si vous voulez garder vos messages de log liés à Drupal hors de la console de Firebug normale, vous pouvez écrire des messages à la Drupal pour Firebug log avec la fonction firep ():

firep($item, $optional_title)
6
répondu AlexA 2013-05-30 17:18:41

Drupal 8

// Logs a notice
\Drupal::logger('my_module')->notice($message);
// Logs an error
\Drupal::logger('my_module')->error($message);

Voir plus d'exemples à Comment enregistrer les Messages dans Drupal 8 .

6
répondu milkovsky 2016-03-21 17:02:45

Watchdog est sans doute 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 faire le site en direct).

http://api.drupal.org/api/function/drupal_set_message/6

3
répondu DilbertDave 2009-11-10 08:54:17

dans drupal 7 Nous pouvons log message par la méthode suivante:

fonction de chien de garde drupal que nous pouvons utiliser pour enregistrer le message dans la base de données , assurez-vous que nous avons activé le module de base optionnel pour L'enregistrement de base de données à /admin/build/modules.

watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)

$type: La catégorie à laquelle appartient ce message , par exemple: PHP,cron.., nous pouvons filtrer le message par type.

$ message: Le message à enregistrer dans le journal,par exemple: "le module suivant est absent du 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 impossible à traduire. pour faire traduire un message, les variables de passage de valeur dynamique ne pas passer dans le message doivent être ajoutées en utilisant des chaînes de caractères.

exemple: watchdog ('cg_volunteer',' cg in form_alter %formly', array ('%formly' = > $form ['#id']), WATCHDOG_NOTICE, $link = NULL);

$gravité La gravité du message,logs peut être filtré par la gravité conformément à la RFC 3164. Les valeurs possibles sont WATCHDOG_ERROR, WATCHDOG_WARNING, etc. Pour plus d'exemple voir https://api.drupal.org/api/drupal/includes-oui.bootstrap.inc / function/watchdog / 7.x

$lien : Un lien à associer au message.

exemple

/ / for log notices

watchdog('my_module', $message, array());

// pour Loging Erreur

watchdog('my_module', $message, array(), WATCHDOG_ERROR);

dans drupal 8 nous avons utilisé la méthode suivante:

// Pour les Journaux un avis.

\Drupal::logger('my_module')->notice($message);

// Pour les Logs d'erreur.

\Drupal::logger('my_module')->error($message);

/ / en cas d'alerte, des mesures doivent être prises immédiatement.

\Drupal::logger('my_module')->alert($message);

/ / pour Message Critique.

\Drupal::logger('my_module')->critical($message);

// Pour les messages du niveau de Débogage.

\Drupal::logger('my_module')->debug($message);

//en cas d'Urgence, le système est inutilisable.

\Drupal::logger('my_module')->emergency($message);

//Pour L'Avertissement

\Drupal::logger('my_module')->warning($message);

/ / pour les messages D'information.

\Drupal::logger('my_module')->info($message);

aussi pour translate we ne doit pas utiliser t() fonction.

\Drupal::logger('my_module')->alert('Message from @module: @message.', [
'@module' => $module,
'@message' => $message,
]);

ce sera traduit Sur run time.

exemple:

\Drupal::logger('content_entity_example')->notice('@type: deleted %title.',
array(
'@type' => $this->entity->bundle(),
'%title' => $this->entity->label(),
));
2
répondu SynapseIndia 2018-04-05 10:45:36

les deux watchdog pour D7 et \Drupal::logger pour D8 vont écrire log in watchdog table (dans votre base de données), et avec énormes données enregistrées , vous pouvez imaginer l'impact de la performance.

vous pouvez utiliser error_log fonction php pour le faire (voir manuel PHP ).

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 )

1
répondu kaay 2018-07-20 08:37:03
// 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,
]);

Source

0
répondu Santo Boldižar 2018-10-03 09:59:29