私は PHP エラー ログをよく読みますが、自分でログを書く機会はほとんどありません。Wang Jian の「Best Logging Practices」を読んだ後、明確で適切なログを書くことができると感じました。 -構造化されたログは依然として非常に必要です。
ログを書き込む前に、なぜシステムのデフォルトのログ記録方法を使用する代わりに、カスタマイズされたログを記録する必要があるのかを考えてみましょう。
理由は 2 つあると思います:1. チームは管理しやすいように統一フォーマットのログが必要です
2. 大量の無用なエラーログがハードディスクスペースを占有しているため、意味のあるログのみを記録する必要があります。
それでは、実践してみましょう。
1.php.iniを開きます
2. ログをオンにして変更します
コードは次のとおりです:
log_errors = オフ
に変更しました
コードは次のとおりです:log_errors = オン
3. php.iniを保存し、Webサーバーを終了して再起動します
4. コードの先頭に次のコードを追加します
コードは次のとおりです:
//エラー処理関数
関数 myErrorHandler($errno, $errstr, $errfile, $errline)
{
$log_file = "./php_%s_log_".date("Ymd").".log";//ログファイルの保存ディレクトリとファイル名を定義します
$template = '';
スイッチ ($errno) {
ケース E_USER_ERROR:
$template .= "ユーザーエラーレベルのエラーです。修復する必要があります。エラー番号 [$errno] $errstr ";
$template .= "エラー場所ファイル $errfile、行 $errline n";
$log_file = sprintf($log_file,'error');
exit(1);//システム終了
休憩;
ケース E_USER_WARNING:
$template .= "ユーザー警告レベルのエラーです。エラー番号 [$errno] $errstr " を修正することをお勧めします。
$template .= "エラー場所ファイル $errfile、行 $errline n";
$log_file = sprintf($log_file,'warning');
休憩;
ケース E_USER_NOTICE:
$template .= "ユーザーNOTICEレベルのエラー。システムには影響せず、修復する必要はありません。エラー番号[$errno] $errstr ";
$template .= "エラー場所ファイル $errfile、行 $errline n";
$log_file = sprintf($log_file,'notice');
休憩;
デフォルト:
$template .= "不明なエラーの種類: エラー番号 [$errno] $errstr ";
$template .= "エラー場所ファイル $errfile、行 $errline n";
$log_file = sprintf($log_file,'unknown');
休憩;
}
file_put_contents($log_file,$template,FILE_APPEND);
true を返す;
}
$error_handler = set_error_handler("myErrorHandler");//カスタムエラーログを有効にする
5. 前のコードの後にエラーコードを書いてみます
エコー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がonになっている場合、上記のエラーはすべて発生します。定義したファイルにシステム エラー ログとして記録されます。
以上がこの記事で説明した内容です。皆さんが PHP カスタム エラー ログについて新たに理解できることを願っています。
http://www.bkjia.com/PHPjc/958126.html