事象: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 の場合、どこなんじゃろ?
![](https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png?v=c78bd457575a)
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”
こんなんがあった。
![](https://it-afi.com/wp-content/uploads/cocoon-resources/blog-card-cache/e936bc86aff8d917ce587eca0c0f845d.png)
ここによると
「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の記事が参考になりそう。
その他参考にしたサイト
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9Q2VudE9TJTIwJUUzJTgxJUE3JTIwUEhQJTIwJUUzJTgxJUFFJUUzJTgyJUE4JUUzJTgzJUE5JUUzJTgzJUJDJUUzJTgzJUFEJUUzJTgyJUIwJUUzJTgxJThDJUU1JTg3JUJBJUU1JThBJTlCJUUzJTgxJTk1JUUzJTgyJThDJUUzJTgxJUFBJUUzJTgxJTg0JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0yZmQ0NzU0Y2QyY2RlNDYyYTEzZWM4MmZmNDg5YWY4MA&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwYmV6ZWtsaWsmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPThlNWRmZGQxY2MxYjI1ZmM4OTIyMjk3MmI2Y2VjMzVi&blend-x=142&blend-y=491&blend-mode=normal&s=90371edbfb31dfcd0bd0549f40dbf273)
CentOSでerror_logを吐かせるやり方
PHPのerror_logの設定
PHPのerror_logの内容
![](https://cl.pocari.org/cl.images/cl.pocari.org.png)
syslogは/var/log/messages である
![](https://it-afi.com/wp-content/uploads/cocoon-resources/blog-card-cache/a03ebdb6d150e33d625fec4a2a4178cd.jpg)
Docker PHPでエラーログ吐かす
公式のerror_reporting マニュアル
コメント
[…] php error_log 吐かれない事象:php のエラーログが出力されていないphpのエラーが出たのに/var/log/error_logに出力されて無い🥺これじゃ検証できないよー🥺環境 CentOS release 6.9 (Final) it- […]