事象:php のエラーログが出力されていない
phpのエラーが出たのに/var/log/error_logに出力されて無い🥺
これじゃ検証できないよー🥺
環境
- CentOS release 6.9 (Final)
- x86_64
- PHP 7.3.25
原因:php.iniのerror_logの値が「none」じゃった
php.iniのerror_logの値が「none」じゃった。
]# php -r 'phpinfo();' | grep log
Zend Engine v3.3.25, Copyright (c) 1998-2018 Zend Technologies
error_log => no value => no value
error_log => no value => no value
のところじゃな。
対策方法:php.iniにてerror_logの項目を設定する
設定してみる。
vim /etc/php.ini
vimで開いて、
643 error_log = /var/log/httpd/error_log
設定じゃ。
↓
php側の確認。
#php -r 'phpinfo();' | grep log
Zend Engine v3.3.25, Copyright (c) 1998-2018 Zend Technologies
error_log => /var/log/httpd/error_log => /var/log/httpd/error_log
さっき
error_log => no value => no value
だったのが↓
error_log => /var/log/httpd/error_log => /var/log/httpd/error_log
に変わったな。
↓
Apacheにも反映じゃ。(Apache2.4を使用している)
Apacheの再起動を実施。
# httpd -k restart
よっしゃ。
↓
動作確認じゃ。
$ vim error_test.php
<?php
error_log('えらーだよー');
↓
less /var/log/httpd/error_log
↓
あれ、、、出力されてない。
↓
調べたらphpソースの中で
ini_set('error_log', "syslog");
syslogに吐かれるようじゃ。
CentOS6のsyslogは
/var/log/messages
なんじゃが、
Dockerコンテナなせいか
/var/log/messages
が存在しない。
docker の場合、どこなんじゃろ?
starckOverflowによると、
journal
に記録されるらしい。
CentOS7以降ならjournalctl コマンドがあるが、CentOS6だと…?→ちょっとググったら/var/log/messages っぽいんじゃが。。
面倒になってきたので、パス。
ini_set('error_log', "syslog");
を書き換えてみる
↓
ini_set('error_log', "/var/log/httpd/error_log");
↓
更に、使ってるのがモジュール版PHPなので、apacheくんが書き込めるようにする↓
↓
# cd /var/log/httpd/
# chown apache.apache error_log
↓
解決せず。
↓
php.iniで
display_errors = On
になってるとログファイルには吐かれない、とか…?
display_errors = Off
に変更し、
service httpd restart
する。
↓
ダメ。(/var/log/httpd/error_logに吐かれない)
↓
error_reporting の値は?
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
問題なさげ。
↓
apache通さないでphpコマンドでやったら?
$ /usr/bin/php -f phpファイル名
これはerror_log吐かれた。
↓
httpdの設定見てみる。
ErrorLog “|/bin/logger -i -p local4.err -t http_err”
こんなんがあった。
ここによると
「logger メッセージ」で、システムログの末尾にメッセージを追記します
つーことみたいですな。
このへんかな。
諦めた。
ブラウザの画面上にエラーメッセージ吐かせる方法でいく。
→設定方法は、phpのソースに書く場合は以下。
ini_set('display_errors',true);//PHPエラー表示(rue:する false:しない)
→もちろん、php.iniに直接設定してもよい
ちなみに、
docker環境じゃなければ
/var/log/messages に吐かれてるのは確認できた。
後日追記:別のファイルに吐き出させることで吐き出せた
/var/log/httpd/error_log
でなく、べつのファイルに吐き出すように設定した。
ini_set('display_errors',false);//PHPエラー表示しない
ini_set('log_errors',true);//PHPエラーログ取る
ini_set('error_log', "/home/hoge/log/php_error_log");//エラーログ保存パス
吐き出せるようになった。
php-fpm 使ってるとデフォルトでerror_log吐かれないみたい
まだ解決してないけど、Qiitaの記事が参考になりそう。
その他参考にしたサイト
CentOSでerror_logを吐かせるやり方
PHPのerror_logの設定
PHPのerror_logの内容
syslogは/var/log/messages である
Docker PHPでエラーログ吐かす
公式のerror_reporting マニュアル
コメント
[…] php error_log 吐かれない事象:php のエラーログが出力されていないphpのエラーが出たのに/var/log/error_logに出力されて無い🥺これじゃ検証できないよー🥺環境 CentOS release 6.9 (Final) it- […]