エラーログの出力は開発の上でとても大切です。
エラーを確認する事で動作しない原因等が判明するからです。
本日はエラーログの出力について以下の内容でお話していきます。
【基本】エラーログの出し方
【解説】エラーログが出力されない時
【解説】エラーログの出力先
基本から丁寧に解説していきますので、最後まで読んで頂けると幸いです。
エラーログの出し方
まずはエラーログを画面に出す設定を行いましょう。
そのために設定するのは、【php.ini】です。
ローカルにPHPの環境を作成している場合、【php.ini】の場所は以下のような場所です。
// Windowsの場合 C:xamppphpphp.ini // linux系OSの場合 /etc/php.ini
※環境によって異なる場合もあります。
それでは、エラーログを画面出力するための設定をしましょう。
エラーログの画面出力のOn/Off
出力するかを切り替えるには、php.iniのdisplay_errorsの設定を変更します。
エラーログを出力する時
display_errors=On
エラーログを出力しない時
display_errors=Off
php.iniを編集・保存後、Webサーバを再起動しましょう。
これで、ブラウザなどの画面にエラーが出力されるようになります。
ただし、開発が終了しサービス開始後はdisplay_errors=Onにはしない事をお勧めします。
なぜならば、何かエラーが発生した場合にユーザーにその内容が見えてしまうからです。
ユーザーに混乱を起こさないため、またセキュリティの観点からもdisplay_errors=Off設定にしましょう。
エラーログの出力レベルの設定
ログの出力レベルを変更するには、php.iniのerror_reportingの設定を変更します。
なぜこの設定をするのかと言いますと、全てをログに出力する必要がない場合も存在するからです。
情報が多すぎるとその中にある重大な問題を見逃してしまう事もあるでしょう。
以下のように記述をします。
error_reporting=E_ALL & ~E_DEPRECATED
【~】は否定の意味です。
よって、E_DEPRECATED以外の全エラーを出力するという意味です。
php.iniを編集・保存後、Webサーバを再起動しましょう。
これでエラーが出力されるようになりました。
エラーログファイルの出力先
続いて画面にではなく、エラーログファイルを出力させる方法です。
WebサーバはApacheを想定しています。
エラーログファイル
Webサーバのエラーログはhttpd.confで設定します。
ErrorLog "logs/php/error.log"
出力する場所を変更したい場合は、上記項目を修正・保存をしてWebサーバを再起動しましょう。
エラーログファイル出力レベル
出力するエラーのレベルをLogLevelで設定出来ます。
LogLevel warn
warnは、警告より高いレベルのエラーを出力します。
設定出来るレベルは以下の種類です。
レベル | 内容 |
---|---|
emerg | 緊急状態、動作不可 |
alert | すぐに対応する必要がある |
crit | 致命的なエラーが発生している |
error | エラーが発生している |
warn | 警告レベル |
notice | 少し重要な情報 |
info | 情報 |
debug | デバッグ |
開発中であれば、一番低いdebug設定でよいと思います。
しかし運用が始まってからあまり低レベルのエラーを出していると、大事な情報を見逃す可能性があります。
適切なエラーレベルを選択しましょう。
デフォルトエラーログ出力先
Windows環境でのApacheエラーログのデフォルト出力先は
logs/error.log
になっていました。
linux系OSでは、Apacheのデフォルト出力先は
/var/log/httpd/error_log
になっていました。
※環境やバージョンによって変わる事があります。
ファイルが存在しなかった場合には自動的に作成されます。
エラーログファイルが出力されない時
初めて設定を行う時は、うまくいかない事が多いものです。
再度、以下の点についてチェックしてみてください。
Webサーバの再起動
httpd.confやphp.iniの設定ファイルを編集・保存後はWebサーバの再起動が必要になります。
Windowsでxampp環境を使用している方は、Apacheの項目を【Stop】後に再度【Start】してください。
linux系OSの場合は以下のようなコマンドです。
service httpd restart
※バージョンや使っているOSの種類によってコマンドが違う場合があります。
エラーログファイルの存在と所有権
linux系OSの場合、書き込むファイルがない場合にログを作成できない事がありました。
その場合、以下のコマンドで対応します。
touch /var/log/httpd/error_log/php_error.log chown apache:apache /var/log/httpd/error_log/php_error.log
touchコマンドで、エラーログファイルを作成します。
chownコマンドで、エラーログファイルの所有者を設定します。
まとめ
今回はPHPのエラーログ出力について解説しました。
エラーログは開発中、とても役に立つ存在です。
また、サービス開始された後も潜在的なバグや問題の発見に役に立ちます。
必ず設定をして使いこなせるようにしてくださいね。
それでは、また。