[php] 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

편집하다:

편집 할 파일은 원하는 풀을 구성하는 파일입니다. 기본적으로 /etc/php-fpm.d/www.conf


답변

내 php-fpm 로그가 작성되기 전에 오랫동안이 문제로 어려움을 겪었습니다 /var/log/upstart/php5-fpm.log. upstart와 php-fpm의 상호 작용 방식 사이에 버그가있는 것 같습니다. 자세한 내용은 여기를 참조하십시오 : https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595


답변

비슷한 문제가 있었고 pool.d/www.conf파일에 다음을 수행해야했습니다.

php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on

여전히 로그 파일을 작성하지 않았으므로 실제로 touch /var/log/fpm-php.www.log올바른 소유자를 설정하여 로그 파일을 만들어야했습니다 sudo chown www-data:www-data /var/log/fpm-php.www.log.

이 작업이 완료되고 php5-fpm이 다시 시작되면 로깅이 다시 시작되었습니다.


답변

여러 개의 PHP 설정 파일이 있지만이 파일을 편집해야합니다.

/etc/php(version)?/fpm/pool.d/www.conf

다음과 같은 줄의 주석을 해제하십시오.

catch_workers_output

그러면 PHP stderr이 / dev / null 대신 php-fpm의 오류 로그로 이동할 수 있습니다.


답변

나는 여기에 많은 답변에서 통찰력을 수집하고 포괄적 인 해결책을 제시합니다.

따라서 php5-fpm으로 nginx를 설정하고 사용하여 메시지를 기록하면 기본적으로 error_log()볼 수 있습니다 /var/log/nginx/error.log.

를 사용하여 많은 데이터 (예 : 배열)를 로그하려는 경우 문제가 발생할 수 있습니다 error_log(print_r($myArr, true));. 배열이 충분히 크면 nginx로그 항목이 잘리는 것 같습니다 .

해결하기 위해서는이 당신을 구성 할 수 있습니다 fpm( php.net FPM 설정 로그를 관리하기 위해). 그렇게하는 단계는 다음과 같습니다.

  1. 열기 /etc/php5/fpm/pool.d/www.conf:

    $ sudo nano /etc/php5/fpm/pool.d/www.conf

  2. ;의 시작 부분에서 제거하여 다음 두 줄의 주석을 해제하십시오 . (error_log는 여기에 정의되어 있습니다 : php.net )

    ;php_admin_value[error_log] = /var/log/fpm-php.www.log
    ;php_admin_flag[log_errors] = on

  3. 작성 /var/log/fpm-php.www.log:

    $ sudo touch /var/log/fpm-php.www.log;

  4. /var/log/fpm-php.www.logphp5-fpm이 편집 할 수 있도록 소유권을 변경하십시오 .

    $ sudo chown vagrant /var/log/fpm-php.www.log

    참고 : vagrant소유권을 부여 해야하는 사용자입니다. $ ps aux | grep php.*www첫 번째 열 을 실행 하고 살펴보면 이것이 어떤 사용자인지 알 수 있습니다 .

  5. php5-fpm을 다시 시작하십시오 :

    $ sudo service php5-fpm restart

이제 로그가에 있습니다 /var/log/fpm-php.www.log.


답변

v5.3.9부터 현재까지 (5.3.14 및 5.4.4) php-fpm에 https://bugs.php.net/bug.php?id=61045 버그가 있습니다 . 개발자가 약속 한 수정 사항은 다음 릴리스에서 제공 될 예정입니다. 기다리지 않으려면 해당 페이지의 패치를 사용하고 5.3.8로 다시 빌드하거나 롤백하십시오.


답변

fpm.conf 파일에서 오류 로깅 전용 2 변수를 설정하지 않았습니다.

변수는 error_log(오류 로그 파일의 파일 경로) 및 log_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