4

私は 1 年以上にわたって自分の Web サイトに取り組んできましたが、最終的に人々が使用できるようにすることを非常に切望しています。しかし、それは非常に大きくなりました - 私はほとんど私の制御不能と言いたいのですが - それに加えて、私は本当に独学のアマチュアプログラマーです.

したがって、php が生成するすべてのエラーがファイルに記録されることを確認したいので、このファイルにアクセスしてエラーを追跡できます。

現在、私の設定は次のとおりです。

<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', 1);
ini_set('error_log', 'errors.log');
?>

私のerror.logファイルには次のようなものが含まれます:

[14-May-2013 00:16:26] PHP Notice: 未定義変数: 14 行目の /home/www/dir/index.php に存在しない変数 [14-May-2013 00:16:28] PHP Notice: 未定義変数: 14 行目の /home/www/dir/index.php に存在しない変数

エラーがログに記録されます。

しかし今、私は問題を抱えています:

  1. それらはすべて一列に並んでおり、途切れることはありません。読みづらくなる。各エラーを新しい行に取得するにはどうすればよいですか?

  2. タイムスタンプがあることがわかりました。素晴らしい!ユーザーの IP アドレスやその他のカスタム項目などを追加するにはどうすればよいですか?

繰り返しますが、私の質問:

PHP がエラーログファイルにエラーを書き込む方法を変更するには? 特に、ログに記録された各エラーの後に新しい行を作成して、error.log ファイルを読みやすくするにはどうすればよいでしょうか。また、IP アドレスなどのカスタム データや値を追加するにはどうすればよいでしょうか?

回答: 私は次のことをしました - これはphpが標準で行っていることをいくらか再現しているようで、そこから変更することができます.

<?php
function my_error_handler($type, $message, $file, $line, $vars)
{
    switch($type) 
    { 
        case 1: // 1 // 
            $type_str = 'ERROR'; 
            break;
        case 2: // 2 // 
            $type_str = 'WARNING';
            break;
        case 4: // 4 // 
            $type_str = 'PARSE';
            break;
        case 8: // 8 // 
            $type_str = 'NOTICE'; 
            break;
        case 16: // 16 // 
            $type_str = 'CORE_ERROR'; 
            break;
        case 32: // 32 // 
            $type_str = 'CORE_WARNING'; 
            break;
        case 64: // 64 // 
            $type_str = 'COMPILE_ERROR'; 
            break;
        case 128: // 128 // 
            $type_str = 'COMPILE_WARNING'; 
            break;
        case 256: // 256 // 
            $type_str = 'USER_ERROR'; 
            break;
        case 512: // 512 // 
            $type_str = 'USER_WARNING'; 
            break;
        case 1024: // 1024 // 
            $type_str = 'USER_NOTICE'; 
            break;
        case 2048: // 2048 // 
            $type_str = 'STRICT'; 
            break;
        case 4096: // 4096 // 
            $type_str = 'RECOVERABLE_ERROR'; 
            break;
        case 8192: // 8192 // 
            $type_str = 'DEPRECATED'; 
            break;
        case 16384: // 16384 // 
            $type_str = 'USER_DEPRECATED'; 
            break;
    }


    $errormessage =  '[ '.date(r).' ] '.$type_str.': '.$message.' in '.$file.' on line '.$line."\n";
   // for development simply ECHO $errormessage;

        $file = 'my_errors.log';
        file_put_contents($file, $errormessage, FILE_APPEND);
}

error_reporting(E_ALL);
ini_set('display_errors', '0');
set_error_handler('my_error_handler');

?>
4

1 に答える 1