php error_log 吐かれない

php-logo php

 

事象: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 の場合、どこなんじゃろ?

Change docker log messages location
I met a problem with docker logging and after reading a lot of sources didn't find solution: is there a way to discard messages of docker daemon in /var/log/mes...

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 】コマンド――システムログに記録を追加する
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、システムログに記録を追加する「logger」コマンドです。

ここによると

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");//エラーログ保存パス

 

吐き出せるようになった。

 

その他参考にしたサイト

CentOS で PHP のエラーログが出力されない - Qiita
error_log デフォルトでは PHP のエラーログは Apache のエラーログ /var/log/httpd/error_log に出力される。 PHP の ini ファイルで error_log に値を指定するとそちら...

CentOSでerror_logを吐かせるやり方

 

PHPのerror_logの設定

 

【PHP】エラーログの出力方法【error_log】 | とものブログ
PHPでエラーログの出力方法について書きました。保守の観点から問題箇所を調べるためにログの出力は必須ですので、しっかりとエラーログを出力するできるようにマスターしましょう。

PHPのerror_logの内容

 

PHP の error_log に syslog を指定した際に他のログと混ざらないようにする

syslogは/var/log/messages である

 

docker php でエラーログが出力されない | tyablog.net
dockerの、php用のapacheイメージ(php-apache)ですが、 docker logsコマンドでアクセスログ、エラーログを確認する事が出来るはずなんですが、 エラーログが確認できていない事に気づいて困ったので解決方法を記載します。 DockerHub - PHP ログの確認 dockerでも、docke...

Docker PHPでエラーログ吐かす

 

PHP: error_reporting - Manual

公式のerror_reporting マニュアル

 

 

 

コメント

タイトルとURLをコピーしました