定義されたエラー ログをプロジェクト内でタイムリーに処理する必要がある場合は、カスタム エラー ログの出力方法を変更する必要があります (ログの書き込み、電子メールの送信、テキスト メッセージの送信)
1. register_shutdown_function(array('phperror','shutdown_function ')); //PHP プログラムの実行後に実行される関数を定義します。その機能はプログラムの実行完了後に実行されます。プログラムの実行が完了した後の以降の動作。プログラムの実行中に実行タイムアウトまたは強制シャットダウンが発生する可能性がありますが、この場合のデフォルトのプロンプトは非常に不親切です。 register_shutdown_function() 関数を使用して例外をキャッチすると、よりわかりやすいエラー表示方法を提供できます。同時に、実行完了後の一時ファイルなどの一時データのクリーニングなど、一部の機能のフォローアップ操作も実装できます。
呼び出し条件は次のように理解できます:
1. ユーザーによりページが強制停止されたとき
2. プログラムコードが時間切れになったとき
3. PHPコードの実行が完了すると、コード実行時の例外、エラー、警告です
2. set_error_handler(array('phperror','error_handler')); //ユーザー定義のエラー処理関数を設定します
set_error_handler() 関数を実行し、(trigger_error() を介して) エラーをトリガーします。 : カスタム ログを記録する必要があるのはなぜですか?システムのデフォルトのロギング方法を使用する代わりに?
1. チームは管理を容易にするための統一されたログ形式を必要としています
2. 大量の役に立たないエラー ログがハードディスクのスペースを占有しており、意味のあるログのみを記録する必要があります。
それでは、実践してみましょう。
1. php.ini を開きます
2. ログ記録をオンにして、
を
に変更します。3. php.ini を保存し、Web サーバーを終了して再起動します
4.次のコードは次のとおりです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?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 中国語 Web サイトの他の関連記事を参照してください。