PHP-FPM이 오류 로그에 기록하지 않습니다
방금 nginx + php-fpm 서버를 설치했습니다. PHP-FPM이 로그에 오류를 쓰지 않는 것을 제외하고는 모든 것이 잘 보입니다.
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;
}
}
잘못된 PHP 스크립트를 작성하고 실행했으며 웹 브라우저에서 오류 출력이 표시됩니다. 또한 nginx 오류 로그에는 동일한 메시지와 함께 fpm의 stderr 출력이 표시됩니다. 사용자가 지정된 로그 폴더에 대한 쓰기 권한 (777도 시도했습니다)을 가지고 있는지 확인했습니다. 지정된 error.log 파일조차 php-fpm에 의해 성공적으로 생성되었습니다. 그러나 PHP 스크립트에서 어떤 엄청난 오류가 발생하더라도 로그 파일은 항상 비어 있습니다.
무슨 일이야?
[나중에 그 이유를 꽤나 발견했다]
허가였습니다. 사이트의 사용자로 소유자를 변경하여 문제를 해결했습니다.
이것은 나를 위해 일했다 :
; 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
편집하다:
The file to edit is the file that configure your desired pool. By default its: /etc/php-fpm.d/www.conf
I struggled with this for a long time before finding my php-fpm logs were being written to /var/log/upstart/php5-fpm.log
. It appears to be a bug between how upstart and php-fpm interact. See more here: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595
I had a similar issue and had to do the following to the pool.d/www.conf
file
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
It still wasn't writing the log file so I actually had to create it by touch /var/log/fpm-php.www.log
then setting the correct owner sudo chown www-data.www-data /var/log/fpm-php.www.log
.
Once this was done, and php5-fpm restarted, logging was resumed.
There are multiple php config files, but THIS is the one you need to edit:
/etc/php(version)?/fpm/pool.d/www.conf
uncomment the line that says:
catch_workers_output
That will allow PHPs stderr to go to php-fpm's error log instead of /dev/null.
I gathered insights from a bunch of answers here and I present a comprehensive solution:
So, if you setup nginx with php5-fpm and log a message using error_log()
you can see it in /var/log/nginx/error.log
by default.
A problem can arise if you want to log a lot of data (say an array) using error_log(print_r($myArr, true));
. If an array is large enough, it seems that nginx
will truncate your log entry.
To get around this you can configure fpm
(php.net fpm config) to manage logs. Here are the steps to do so.
Open
/etc/php5/fpm/pool.d/www.conf
:$ sudo nano /etc/php5/fpm/pool.d/www.conf
Uncomment the following two lines by removing
;
at the beginning of the line: (error_log is defined here: php.net);php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on
Create
/var/log/fpm-php.www.log
:$ sudo touch /var/log/fpm-php.www.log;
Change ownership of
/var/log/fpm-php.www.log
so that php5-fpm can edit it:$ sudo chown vagrant /var/log/fpm-php.www.log
Note:
vagrant
is the user that I need to give ownership to. You can see what user this should be for you by running$ ps aux | grep php.*www
and looking at first column.Restart php5-fpm:
$ sudo service php5-fpm restart
Now your logs will be in /var/log/fpm-php.www.log
.
There is a bug https://bugs.php.net/bug.php?id=61045 in php-fpm from v5.3.9 and till now (5.3.14 and 5.4.4). Developer promised fix will go live in next release. If you don't want to wait - use patch on that page and re-build or rollback to 5.3.8.
in your fpm.conf file you haven't set 2 variable which is only for error logging
this variables are error_log (file path of your error log file) log_level (error logging level)
; Error log file ; Note: the default prefix is /usr/local/php/var ; Default Value: log/php-fpm.log
error_log = log/php-fpm.log
; Log level ; Possible Values: alert, error, warning, notice, debug ; Default Value: notice
log_level = notice
in my case I show that the error log was going to /var/log/php-fpm/www-error.log . so I commented this line in /etc/php-fpm.d/www.conf
php_flag[display_errors] is commented
php_flag[display_errors] = on log will be at /var/log/php-fpm/www-error.log
and as said above I also uncommented this line
catch_workers_output = yes
Now I can see logs in the file specified by nginx.
Check the Owner directory of "PHP-FPM"
You can do:
ls -lah /var/log/php-fpm/
chown -R webusr:webusr /var/log/php-fpm/
chmod -R 777 /var/log/php-fpm/
참고URL : https://stackoverflow.com/questions/8677493/php-fpm-doesnt-write-to-error-log
'Programming' 카테고리의 다른 글
if () {}와 if ()의 차이점 : endif; (0) | 2020.06.09 |
---|---|
안드로이드에서 android : weightSum은 무엇이며 어떻게 작동합니까? (0) | 2020.06.09 |
변수 안에있는 문자열에 큰 따옴표를 추가하는 방법은 무엇입니까? (0) | 2020.06.09 |
여러 확인란에서 $ _POST 받기 (0) | 2020.06.09 |
컨트롤에 툴팁을 어떻게 추가합니까? (0) | 2020.06.09 |