理由は 2 つあると思います:
1. 管理を容易にするために、チームはログの統一された形式を必要としています
2. 大量の役に立たないエラー ログがハードディスクのスペースを占有しており、意味のあるログのみを記録する必要があります。
それでは、実践してみましょう。
1. php.ini を開きます
2. ログをオンにして、
log_errors = Off
を
log_errors = On
に変更します。 3. php.ini を保存し、Web サーバーを終了して再起動します
4. コードの先頭に追加します。次のコードは次のとおりです
<?php //错误处理函数 function myErrorHandler($errno, $errstr, $errfile, $errline) { $log_file = "./php_%s_log_".date("Ymd").".log";//定义日志文件存放目录和文件名 $template = ''; switch ($errno) { case E_USER_ERROR: $template .= "用户ERROR级错误,必须修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'error'); exit(1);//系统退出 break; case E_USER_WARNING: $template .= "用户WARNING级错误,建议修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'warning'); break; case E_USER_NOTICE: $template .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'notice'); break; default: $template .= "未知错误类型: 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'unknown'); break; } file_put_contents($log_file,$template,FILE_APPEND); return true; } $error_handler = set_error_handler("myErrorHandler");//开启自定义错误日志
5. 今のコードの後にエラー コードを書いてみてください
echo 1/0;
定義したパスの下に余分なログ ファイルがあるかどうか確認してください。 :)
注: 次のレベルのエラーは、ユーザー定義関数では処理できません: E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING、および set_error_handler() 関数が呼び出されるファイル内で生成されるほとんどの E_STRICT。
ただし、エラーログシステムを有効にし (php.ini で log_error = on)、システムログファイルを指定し (php.ini で error_log = パス名も)、error_reporting がオンになっている場合、上記のエラーが発生します。これらはすべて、システム エラー ログとして定義したファイルに記録されます。
以上がこの記事で説明した内容です。皆さんが PHP カスタム エラー ログについて新たに理解できることを願っています。
PHP カスタム エラー ログに関するその他の記事については、PHP 中国語 Web サイトに注目してください。