|
|
|
|
|
今天一PHP程序運(yùn)行出現(xiàn)問(wèn)題,想看看錯(cuò)誤信息,但是Nginx環(huán)境如何查看PHP錯(cuò)誤信息?常規(guī)做法是看log日志文件,但是首先要做的是能讓PHP把錯(cuò)誤信息輸出到log文件里。原以為很簡(jiǎn)單,直接在php.ini里設(shè)置下log日志文件路徑即可,但測(cè)試后發(fā)現(xiàn)這樣做是不行的。那問(wèn)題在哪?
Nginx PHP 錯(cuò)誤日志輸出到log文件的設(shè)置方法
通過(guò)查閱了一些相關(guān)的文章資料,原來(lái)主要根源在于php-fpm的配置文件php-fpm.conf。
php-fpm的配置文件php-fpm.conf中默認(rèn)是關(guān)閉worker進(jìn)程的錯(cuò)誤輸出,直接把他們重定向到/dev/null,所以我們看不到php的錯(cuò)誤日志。
要解決這一問(wèn)題,只需設(shè)置下php-fpm.conf即可。我使用的關(guān)鍵代碼如下:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
; 下面這句不能少,記錄PHP執(zhí)行錯(cuò)誤日志
catch_workers_output = yes
解釋?zhuān)?/strong>
1、error_log 是定義日志文件路徑
2、log_level = notice 不能少
3、catch_workers_output = yes 不能少
通過(guò)這樣設(shè)置后,php的錯(cuò)誤信息就會(huì)直接寫(xiě)入error_log定義的日志文件里了。
重啟php服務(wù),方法:
service php-fpm restart
試試有無(wú)效果?
上述方法無(wú)效?再按下面方法設(shè)置php.ini
網(wǎng)上不少文章說(shuō)到還要設(shè)置php.ini的error_log路徑,但我測(cè)試發(fā)現(xiàn),php.ini的error_log路徑設(shè)置是沒(méi)有意義的,這就解釋了為什么一開(kāi)始我只設(shè)置php.ini日志輸出路徑卻沒(méi)有效果的原因。也許是別人的php-fpm.conf設(shè)置與我不同,造成還需要設(shè)置php.ini的error_log路徑。網(wǎng)友們?nèi)绻l(fā)現(xiàn)我前面提到的設(shè)置方法不可行,那么可以再設(shè)置一下php.ini,關(guān)鍵代碼是如下三行:
log_errors = On
error_log = "/usr/local/php/var/log/php_errors.log"
error_reporting = E_ALL & ~E_NOTICE
更新(2021年12月13日):
設(shè)置完php.ini后,需要重啟Nginx服務(wù)。另外,把php_errors.log權(quán)限設(shè)置為777。測(cè)試有效!
開(kāi)頭設(shè)置php-fpm.conf,輸出的error_log日志是記錄php運(yùn)行日志,而不是網(wǎng)站程序產(chǎn)生的php錯(cuò)誤日志。
解釋?zhuān)?/strong>
1、log_errors = On 不能少
2、error_log 設(shè)置日志文件路徑
3、error_reporting 的值設(shè)為 E_ALL & ~E_NOTICE