php fpm 不写errorlog,PHP-FPM不写入错误日志
PHP-FPM不寫入錯(cuò)誤日志
我剛剛安裝了一個(gè)nginx + php-fpm服務(wù)器。 一切似乎很好,除了PHP-FPM從不將錯(cuò)誤寫入其日志。
fpm.conf
[default] listen = /var/run/php-fpm/default.sock listen.allowed_clients = 127.0.0.1 listen.owner = webusr listen.group = webusr listen.mode = 0666 user = webusr group = webusr pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.status_path = /php/fpm/status ping.path = /php/fpm/ping request_terminate_timeout = 30s request_slowlog_timeout = 10s slowlog = /var/log/php-fpm/default/slow.log chroot = /var/www/sites/webusr catch_workers_output = yes env[HOSTNAME] = mapsvr.mapking.com php_flag[display_errors] = on php_admin_value[error_log] = /var/log/php-fpm/default/error.log php_admin_flag[log_errors] = on
nginx.conf
server { listen 80 default_server; server_name _; charset utf-8; access_log /var/log/nginx/access.log rest; include conf.d/drops.conf.inc; location / { root /var/www/sites/webusr/htdocs; index index.html index.htm index.php; } # pass the PHP scripts to FastCGI server listening on socket # location ~ \.php$ { root /var/www/sites/webusr/htdocs; include /etc/nginx/fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /htdocs/$fastcgi_script_name; if (-f $request_filename) { fastcgi_pass unix:/var/run/php-fpm/default.sock; } } location = /php/fpm/status { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php-fpm/default.sock; } location = /php/fpm/ping { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php-fpm/default.sock; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
我做了一個(gè)錯(cuò)誤的PHP腳本并運(yùn)行,并在Web瀏覽器上看到錯(cuò)誤輸出。 另外nginx錯(cuò)誤日志說明從同一個(gè)消息fpm的stderr輸出。 我已經(jīng)檢查用戶有寫(甚至已經(jīng)嘗試777)的權(quán)限到指定的日志文件夾。 甚至指定的error.log文件已經(jīng)由php-fpm成功創(chuàng)build。 但是,無論php腳本發(fā)生了多大的錯(cuò)誤,日志文件都是空的。
這是怎么回事?
[稍后find原因]
這是許可。 更改所有者到網(wǎng)站的用戶解決了這個(gè)問題。
這對(duì)我工作:
; Redirect worker stdout and stderr into main error log. If not set, stdout and ; stderr will be redirected to /dev/null according to FastCGI specs. ; Default Value: no catch_workers_output = yes
編輯:
要編輯的文件是configuration所需池的文件。 默認(rèn)是:/etc/php-fpm.d/www.conf
在find我的php-fpm日志寫入/var/log/upstart/php5-fpm.log之前,我苦苦掙扎了很久。 這似乎是如何新貴和php-fpm交互之間的一個(gè)錯(cuò)誤。 在這里查看更多: https : //bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595
我有一個(gè)類似的問題,并不得不做以下的pool.d/www.conf文件
php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on
它還沒有寫日志文件,所以我實(shí)際上已經(jīng)通過touch /var/log/fpm-php.www.log創(chuàng)build它,然后設(shè)置正確的所有者sudo chown www-data.www-data /var/log/fpm-php.www.log 。
一旦完成,php5-fpm重新啟動(dòng),日志恢復(fù)。
有多個(gè)PHPconfiguration文件,但這是你需要編輯的一個(gè):
/etc/php(version)?/fpm/pool.d/www.conf
取消注釋:
catch_workers_output
這將允許PHP stderr去php-fpm的錯(cuò)誤日志而不是/ dev / null。
在v5.3.9和直到現(xiàn)在(5.3.14和5.4.4)的php-fpm中有一個(gè)bug https://bugs.php.net/bug.php?id=61045 。 開發(fā)者承諾的修復(fù)將在下一個(gè)版本中生效。 如果您不想等 – 在該頁面上使用補(bǔ)丁并重新構(gòu)build或回滾到5.3.8。
我從這里收集了大量的答案,并提出了一個(gè)全面的解決scheme:
所以,如果你用php5-fpm設(shè)置nginx并使用error_log()logging消息,你可以在/var/log/nginx/error.log默認(rèn)看到它。
如果你想使用error_log(print_r($myArr, true));logging大量數(shù)據(jù)(比如數(shù)組),就會(huì)出現(xiàn)問題error_log(print_r($myArr, true)); 。 如果一個(gè)數(shù)組足夠大,看來nginx會(huì)截?cái)嗄愕娜罩緱l目。
為了解決這個(gè)問題,你可以configurationfpm來pipe理日志。 以下是這樣做的步驟。
打開/etc/php5/fpm/pool.d/www.conf :
$ sudo nano /etc/php5/fpm/pool.d/www.conf
取消注釋以下兩行; 在行首:
;php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on
創(chuàng)build/var/log/fpm-php.www.log :
$ sudo touch /var/log/fpm-php.www.log;
更改/var/log/fpm-php.www.log所有權(quán),以便php5-fpm可以對(duì)其進(jìn)行編輯:
$ sudo chown vagrant /var/log/fpm-php.www.log
注意: vagrant是我需要給予所有權(quán)的用戶。 你可以通過運(yùn)行$ ps aux | grep php.*www來看到這個(gè)用戶應(yīng)該是什么 $ ps aux | grep php.*www和看第一列。
重新啟動(dòng)php5-fpm:
$ sudo service php5-fpm restart
現(xiàn)在你的日志將在/var/log/fpm-php.www.log 。
在您的fpm.conf文件中,您沒有設(shè)置僅用于錯(cuò)誤logging的2個(gè)variables
這個(gè)variables是error_log(錯(cuò)誤日志文件的文件path)log_level(錯(cuò)誤日志級(jí)別)
; 錯(cuò)誤日志文件; 注意:默認(rèn)的前綴是/ usr / local / php / var; 默認(rèn)值:log / php-fpm.log
error_log = log/php-fpm.log
; 日志級(jí)別; 可能的值:警報(bào),錯(cuò)誤,警告,通知,debugging; 默認(rèn)值:通知
log_level = notice
在我的情況下,我顯示錯(cuò)誤日志是去/var/log/php-fpm/www-error.log 。 所以我在/etc/php-fpm.d/www.conf中評(píng)論了這一行
php_flag[display_errors] is commented php_flag[display_errors] = on log will be at /var/log/php-fpm/www-error.log
如上所述,我也沒有注意到這一行
catch_workers_output = yes
現(xiàn)在我可以在由nginx指定的文件中看到日志。
檢查“PHP-FPM”的所有者目錄
你可以做:
ls -lah /var/log/php-fpm/ chown -R webusr:webusr /var/log/php-fpm/ chmod -R 777 /var/log/php-fpm/
總結(jié)
以上是生活随笔為你收集整理的php fpm 不写errorlog,PHP-FPM不写入错误日志的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 凯迪仕q3充电多久
- 下一篇: php扩展调试,5分钟学会PHP扩展开发