Maison >développement back-end >tutoriel php >Qu'est-ce que le journal des erreurs personnalisé PHP ? Explication détaillée de l'exemple de code du journal des erreurs

Qu'est-ce que le journal des erreurs personnalisé PHP ? Explication détaillée de l'exemple de code du journal des erreurs

伊谢尔伦
伊谢尔伦original
2017-07-17 16:58:471820parcourir

Si le journal des erreurs défini doit être traité en temps opportun dans le projet, alors la méthode de sortie du journal des erreurs personnalisé doit être modifiée (écriture des journaux, envoi emails, envoi de messages texte)

1. register_shutdown_function(array('phperror','shutdown_function')); //Définir la fonction à exécuter après l'exécution du programme PHP

La fonction peut implémenter la fonction à exécuter après l'exécution du programme. Sa fonction est que des opérations de suivi à la fin de l'exécution du programme peuvent être implémentées. Il peut y avoir un délai d'exécution ou un arrêt forcé lorsque le programme est en cours d'exécution, mais l'invite par défaut dans ce cas est très peu conviviale. Si vous utilisez la fonction register_shutdown_function() pour intercepter les exceptions, vous pouvez fournir une méthode d'affichage des erreurs plus conviviale. En même temps, des opérations de suivi de certaines fonctions peuvent être mises en œuvre, telles que le nettoyage temporaire des données après la fin de l'exécution, y compris les fichiers temporaires, etc.

Vous pouvez comprendre les conditions d'appel comme ceci :

1. Lorsque la page est forcée de s'arrêter par l'utilisateur
2. Lorsque le code du programme expire
3. Lorsque L'exécution du code PHP est terminée, il y a des exceptions, des erreurs et des avertissements dans l'exécution du code

2. set_error_handler(array('phperror','error_handler')); Définir une fonction de gestion des erreurs définie par l'utilisateur

Définir un gestionnaire d'erreurs défini par l'utilisateur via la fonction set_error_handler(), puis déclencher l'erreur (via trigger_error()) :

3. set_exception_handler( array('phperror','appException')); // Gestion des exceptions personnalisées

Avant d'écrire des logs, nous nous demandons : Pourquoi avons-nous parfois besoin d'enregistrer des logs personnalisés ? Au lieu d'utiliser la méthode de journalisation par défaut du système ?

1. L'équipe a besoin d'un format de journal unifié pour une gestion facile

2. Un grand nombre de journaux d'erreurs inutiles occupent de l'espace sur le disque dur et seuls les journaux significatifs doivent être enregistrés.

Ensuite, pratiquez-le.

1. Ouvrez votre php.ini

2. Activez la journalisation et remplacez

log_errors = Off

par

log_errors = On

3. .ini, quittez et redémarrez le serveur Web

4. Ajoutez le code suivant au début de votre code

<?php
//错误处理函数
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    $log_file = "./php_%s_log_".date("Ymd").".log";//定义日志文件存放目录和文件名
    $template = &#39;&#39;;
    switch ($errno) {
    case E_USER_ERROR:
        $template .= "用户ERROR级错误,必须修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;error&#39;);
        exit(1);//系统退出
        break;
    case E_USER_WARNING:
        $template .= "用户WARNING级错误,建议修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;warning&#39;);
        break;
    case E_USER_NOTICE:
        $template .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
    $log_file = sprintf($log_file,&#39;notice&#39;);
        break;
    default:
        $template .= "未知错误类型: 错误编号[$errno] $errstr  ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;unknown&#39;);
        break;
    }
    file_put_contents($log_file,$template,FILE_APPEND);
    return true;
}
$error_handler = set_error_handler("myErrorHandler");//开启自定义错误日志

5. Essayez d'écrire un code d'erreur après le code tout à l'heure

. 🎜>

echo 1/0;

Voir s'il y a un fichier journal supplémentaire sous le chemin que vous avez défini ? :)

Remarque : Les niveaux d'erreurs suivants ne peuvent pas être gérés par les fonctions définies par l'utilisateur : E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING et la plupart des E_STRICT générés dans le fichier où se trouve la fonction set_error_handler(). appelé. .

Mais lorsque vous activez le système de journalisation des erreurs (log_error = on dans php.ini) et spécifiez le fichier journal du système (également error_log=path name dans php.ini), et que error_reporting est activé, tout ce qui précède les erreurs seront enregistrées dans le fichier que vous définissez comme journal des erreurs système.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn