實(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
解釋?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
解釋?zhuān)?/p>
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ò)誤日志中,可以方便查詢(xún)。
在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_geo模塊實(shí)現(xiàn)CDN調(diào)度的配置方法
今天小編就為大家分享一篇利用Nginx_geo模塊實(shí)現(xiàn)CDN調(diào)度的配置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
linux設(shè)置Nginx自動(dòng)重啟的實(shí)現(xiàn)
在Linux系統(tǒng)中,設(shè)置Nginx服務(wù)開(kāi)機(jī)自動(dòng)啟動(dòng)及意外停止后自動(dòng)重啟是保持服務(wù)穩(wěn)定運(yùn)行的關(guān)鍵步驟,本文詳細(xì)介紹了如何使用systemctl命令和配置systemd服務(wù)文件來(lái)實(shí)現(xiàn)這一功能,感興趣的可以了解一下2024-09-09
Nginx 平滑升級(jí)的實(shí)現(xiàn)(拒絕服務(wù)漏洞)
本文主要介紹了Nginx 平滑升級(jí)的實(shí)現(xiàn)(拒絕服務(wù)漏洞),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Nginx啟動(dòng)顯示80端口占用問(wèn)題的解決方案
這篇文章主要介紹了Nginx啟動(dòng)顯示80端口占用問(wèn)題的解決方案,文中通過(guò)代碼示例和圖文講解的非常詳細(xì),對(duì)大家解決問(wèn)題有一定的幫助,需要的朋友可以參考下2024-04-04
Nginx流量同時(shí)轉(zhuǎn)發(fā)多后端(流量鏡像分發(fā))
在需要同時(shí)將請(qǐng)求轉(zhuǎn)發(fā)至多個(gè)后端服務(wù)的場(chǎng)景中,Nginx的mirror模塊提供了流量鏡像分發(fā)的功能,本文就來(lái)介紹一下Nginx流量同時(shí)轉(zhuǎn)發(fā)多后端(流量鏡像分發(fā)),感興趣的可以了解一下2024-10-10

