エラーと警告をファイルに記録するにはどうすればよいですか?


233

すべてのエラーと警告をオンにしてファイルに記録するにはどうすればよいですか(php.iniで何も変更せずに)スクリプト内ですべてを設定するにはどうすればよいですか?

ファイル名を定義して、すべてのエラーと警告がログに記録されるようにしたいと考えています。

回答:


358

次のコードを使用します。

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );

次に、ファイルを監視します。

tail -f /tmp/php-error.log

または、2008年のこのブログエントリのphp.ini説明に従って更新してください。


41
ini_setそのコードが実行された場合にのみ機能します。エラーはコードが実行される前に発生するため、解析エラーのあるコードには役立ちません。代わりに、それらの変更をphp.iniに書き込みます。
hakre 2013

9
php.iniを編集できない場合は、これを.htaccessに追加できますphp_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.logperishablepress.com/…を
Matthieu 14年

1
代わりに、htdocsフォルダーにerror.logファイルを作成する方法を教えてください。
トミー

私はあなたがフォルダをtmp/php-error.logあなたが望む場所に変更しただけだと思いますか?
ルーク、

これにより、PHPが5.4.0でクラッシュします
Supuhstar

94

見る

  • error_log —エラーメッセージをどこかに送信する

error_log("You messed up!", 3, "/var/tmp/my-errors.log");

独自のエラーハンドラーを使用してエラー処理をカスタマイズし、エラーや警告など、ログに記録する必要があるものが発生したときにこの関数を呼び出すことができます。追加情報については、PHPマニュアルの「エラー処理」を参照してください。


42

これらのコードをPHP / indexファイルの先頭に置くだけです。

error_reporting(E_ALL); // Error/Exception engine, always use E_ALL

ini_set('ignore_repeated_errors', TRUE); // always use TRUE

ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment

ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path

4
あなたがあればそれだけですまた、すべてのエラーは、および/またはブラウザへの出力に表示するほかにログに。 display_errors稼働中の本番サーバーでは決してオンにしないでください。このディレクティブは特にユーザーへの出力用であり、ロギングには影響しません。php.net/manual/en/...
アーロンWallentine

22

このコードを.htaccessに追加します(php.ini / ini_set関数の代わりとして):

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>

*コメントどおり:これはApacheタイプのサーバー用であり、Nginxなどのサーバー用ではありません。


7
ただし、これは特にApacheのPHPモジュールに関係しています。
SacredSkull 16

9

それは私の個人的な短い機能です

# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty

mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}

6

log_errorsphp.ini の設定オプションを見てください。それはあなたがやりたいことだけをしているようです。このerror_logオプションを使用して、独自のログファイルを設定することもできます。

log_errorsディレクティブがに設定されている場合、OnPHPによって報告されたエラーはサーバーログまたはで指定されたファイルに記録されerror_logます。ini_set必要に応じて、これらのオプションも設定できます。

display_errorsこのオプションが有効になっている場合、php.iniで無効にする必要があることに注意してください)


1
display_errors有効にする場合、なぜ無効にする必要がありますかlog_errors?私の意見では意味がありません。:)
グイドヘンドリックス2010

5
特にエラーのテキストが慎重にファイルに記録されている場合は特に、エラーのコンテンツを本番サーバーで公開する必要がないためです。
Shabbyrobe 2010

3
本番サーバーでは表示エラーを常に無効にする必要があります。エラーロギングが別の場所に設定されている場合ではなく、常に設定されています。エラーはデフォルトでapacheエラーログに記録されます。これで十分なことがよくあります。
ピハン2013

1
本番
環境で

0

さらに、これを機能させるには、「AllowOverride Options」ディレクティブが必要です。(Apache 2.2.15)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.