Comment faire la journalisation des erreurs dans CodeIgniter (PHP)

92

Je veux une journalisation des erreurs dans PHP CodeIgniter. Comment activer la journalisation des erreurs?

J'ai quelques questions:

  1. Quelles sont toutes les étapes pour enregistrer une erreur?
  2. Comment un fichier journal des erreurs est-il créé?
  3. Comment pousser le message d'erreur dans le fichier journal (chaque fois qu'une erreur se produit)?
  4. Comment envoyez-vous cette erreur par e-mail à une adresse e-mail?
udaya
la source

Réponses:

180

CodeIgniter a quelques fonctions de journalisation des erreurs intégrées.

  • Rendre votre dossier / application / logs accessible en écriture
  • Dans /application/config/config.php, définissez
    $config['log_threshold'] = 1;
    ou utilisez un nombre plus élevé, en fonction de la quantité de détails que vous souhaitez dans vos journaux
  • Utilisation log_message('error', 'Some variable did not contain a value.');
  • Pour envoyer un e-mail, vous devez étendre la méthode de classe CI_Exceptions principale log_exceptions(). Vous pouvez le faire vous - même ou utiliser ce . Plus d'informations sur l'extension du noyau ici

Voir http://www.codeigniter.com/user_guide/general/errors.html

Keyo
la source
2
Maintenant, le lien est http://ellislab.com/codeigniter/user-guide/general/errors.html
machineaddict
Y a-t-il des implications pour la sécurité?
Aakil Fernandes
Cela vide les données dans un fichier php dont le nom de fichier est au format: log- [Ymd H: i: s] ou quelle que soit la valeur définie sur la configuration de clé log_date_format définie sur votre fichier de configuration. Tant que vous ne pouvez pas enregistrer / vider des données sensibles, cela devrait être assez sûr. Ce fichier est relatif à une page index.html par défaut, donc les fichiers php générés de toute évidence ne seraient pas accessibles au public - mais vous ne le saurez jamais. Assurez-vous d'avoir toutes ces précautions en place si vous modifiez le répertoire par défaut application / logs.
Vincent Edward Gedaria Binua
7
Rendre votre dossier / application / logs accessible en écriture <<< qui m'a aidé
user1312695
Lorsque j'ai défini "$ config ['log_threshold'] = 1;", je n'ai pas obtenu de journaux dans mon dossier / application / logs. Cependant, lorsque j'ai défini "$ config ['log_threshold'] = 3", un fichier journal est apparu. J'espère que cela t'aides. Je vous remercie! Paix.
masarapmabuhay
25

Pour mettre simplement une ligne dans le journal des erreurs du serveur, utilisez la fonction error_log () de PHP. Cependant, cette méthode n'enverra pas d'e-mail.

Tout d'abord, pour déclencher une erreur:

trigger_error("Error message here", E_USER_ERROR);

Par défaut, cela ira dans le fichier journal des erreurs du serveur. Consultez la directive ErrorLog pour Apache. Pour définir votre propre fichier journal:

ini_set('error_log', 'path/to/log/file');

Notez que le fichier journal que vous choisissez doit déjà exister et être accessible en écriture par le processus serveur. Le moyen le plus simple de rendre le fichier accessible en écriture consiste à faire de l'utilisateur du serveur le propriétaire du fichier. (L'utilisateur du serveur peut être personne, _www, apache ou autre chose, selon la distribution de votre système d'exploitation.)

Pour envoyer l'erreur par e-mail, vous devez configurer un gestionnaire d'erreurs personnalisé:

function mail_error($errno, $errstr, $errfile, $errline) {
  $message = "[Error $errno] $errstr - Error on line $errline in file $errfile";
  error_log($message); // writes the error to the log file
  mail('[email protected]', 'I have an error', $message);
}
set_error_handler('mail_error', E_ALL^E_NOTICE);

Veuillez consulter la documentation PHP correspondante pour plus d'informations.

Mark Eirich
la source
3

Assurez-vous également que vous avez autorisé codeigniter à consigner le type de messages que vous souhaitez dans un fichier de configuration.

c'est à dire $config['log_threshold'] = [log_level ranges 0-4];

Gpak
la source
1

Plus en ce qui concerne la question partie 4 Comment envoyez-vous cette erreur par e-mail à une adresse e-mail? La fonction error_log a également une destination de courrier électronique. http://php.net/manual/en/function.error-log.php

Agha, j'ai trouvé ici un exemple qui montre une utilisation. Envoyer un message d'erreur par e-mail en utilisant error_log ()

error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);
Maître James
la source
0
In config.php add or edit the following lines to this:
------------------------------------------------------
$config['log_threshold'] = 4; // (1/2/3)
$config['log_path'] = '/home/path/to/application/logs/';

Run this command in the terminal:
----------------------------------
sudo chmod -R 777 /home/path/to/application/logs/
Charleskimani
la source