實(shí)現(xiàn)Nginx中使用PHP-FPM時(shí)記錄PHP錯(cuò)誤日志的配置方法
今天一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)題在哪?
通過(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
解釋:
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
解釋:
1、log_errors = On 不能少
2、error_log 設(shè)置日志文件路徑
3、error_reporting 的值設(shè)為 E_ALL & ~E_NOTICE
下面是其他網(wǎng)友的補(bǔ)充
nginx與apache不一樣,在apache中可以直接指定php的錯(cuò)誤日志,那樣在php執(zhí)行中的錯(cuò)誤信息就直接輸入到php的錯(cuò)誤日志中,可以方便查詢。
在nginx中事情就變成了這樣:nginx只對(duì)頁(yè)面的訪問(wèn)做access記錄日志。不會(huì)有php的error log 信息。nginx把對(duì)php的請(qǐng)求發(fā)給php-fpm fastcgi進(jìn)程來(lái)處理,默認(rèn)的php-fpm只會(huì)輸出php-fpm的錯(cuò)誤信息,在php-fpm的errors log里也看不到php的errorlog。
原因是php-fpm的配置文件php-fpm.conf中默認(rèn)是關(guān)閉worker進(jìn)程的錯(cuò)誤輸出,直接把他們重定向到/dev/null,所以我們?cè)趎ginx的error log 和php-fpm的errorlog都看不到php的錯(cuò)誤日志。
所以我們要進(jìn)行如下的設(shè)置就能查看到nginx下php-fpm不記錄php錯(cuò)誤日志的方法:
1,修改php-fpm.conf中的配置,如果沒(méi)有請(qǐng)?jiān)黾?
[global]
; Note: the default prefix is /usr/local/php/var
error_log = log/php_error_log
[www]
catch_workers_output = yes
2.修改php.ini中配置,沒(méi)有則增加:
log_errors = On
error_log = "/usr/local/php/var/log/error_log"
error_reporting=E_ALL&~E_NOTICE
3.重啟php-fpm
當(dāng)PHP執(zhí)行錯(cuò)誤時(shí)就能看到錯(cuò)誤日志在”/usr/local/lnmp/php/var/log/php_error_log”中了
如果出現(xiàn):
[root@localhost etc]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm [17-Apr-2014 18:40:52] ERROR: [/usr/local/php/etc/php-fpm.conf:5] unknown entry 'catch_workers_
[17-Apr-2014 18:40:52] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
[17-Apr-2014 18:40:52] ERROR: FPM initialization failed
failed
那請(qǐng)?jiān)诘谝徊降臅r(shí)候,認(rèn)真將配置寫(xiě)入相對(duì)應(yīng)的組中,不然就出現(xiàn)上面的:
最后看看效果:
相關(guān)文章
Nginx禁止國(guó)外IP訪問(wèn)我的網(wǎng)站的實(shí)現(xiàn)
本文主要介紹了Nginx禁止國(guó)外IP訪問(wèn)我的網(wǎng)站的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07簡(jiǎn)介使用Nginx Plus的在線活動(dòng)監(jiān)控功能的方法
這篇文章主要介紹了簡(jiǎn)介使用Nginx Plus的在線活動(dòng)監(jiān)控功能的方法,注意其目前暫時(shí)為收費(fèi)項(xiàng)目,需要的朋友可以參考下2015-06-06在Linux系統(tǒng)中將Redmine和SVN整合入Nginx的方法
這篇文章主要介紹了在Linux系統(tǒng)中將Redmine和SVN整合入Nginx的方法,示例基于CentOS系統(tǒng),并用到了Ruby腳本,需要的朋友可以參考下2015-06-06nginx編譯安裝后對(duì)nginx進(jìn)行平滑升級(jí)的方法
nginx編譯安裝后用了一段時(shí)間后發(fā)現(xiàn)當(dāng)前版本有漏洞或需要新的功能時(shí)就需要對(duì)當(dāng)前nginx版本進(jìn)行版本升級(jí),所以這時(shí)就需到對(duì)nginx的平滑升級(jí),如何進(jìn)行平滑升級(jí),下面就一起來(lái)了解一下2018-12-12