đăng nhập lỗi nginx / php-fpm


16

Tôi đang cố gắng tìm ra lỗi PHP đang xảy ra trong thiết lập của mình. Tôi đang chạy nginx làm proxy ngược cho PHP-FPM, nhưng tôi không thấy các thông báo E_NOTICE hoặc E_WARNING khác nhau mà ứng dụng của tôi đang tạo. Lý do duy nhất tôi biết chúng đang xảy ra là các phản hồi thất bại và dấu vết ngăn xếp của NewRelic.

Đây là cấu hình đăng nhập:

nginx.conf

proxy_intercept_errors on;
fastcgi_intercept_errors on;

php.ini

error_reporting  =  E_ALL
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
error_log = syslog

php-fpm.conf

[global]
error_log = /var/log/php-fpm/fpm-error.log

[www]
access.log = /var/log/php-fpm/access.log
access.format = "%t \"%m %r%Q%q\" %s %{mili}dms %{kilo}Mkb %C%%"
catch_workers_output = yes

php_flag[display_errors] = on
php_admin_flag[log_errors] = true

rsyslog.conf

:syslogtag, contains, "php" /var/log/php-fpm/error.log

Tôi đã cấu hình PHP để đăng nhập vào syslog, tuy nhiên FPM không có chức năng syslog nên nó đang đăng nhập vào một tệp. Tôi thực sự không quan tâm đến việc các lỗi kết thúc ở đâu, chỉ là chúng kết thúc ở đâu đó.

Có manh mối nào về cách tôi có thể làm việc này không?


Tôi sẽ thử làm cho lỗi hiển thị trước tiên (trong tệp test.php bạn có thể tự kích hoạt lỗi), sau đó đặt chúng vào một tệp và cứ thế .... Có thể các lỗi được kích hoạt là từ cli, do đó sử dụng một php.ini khác
adrian7

Bạn đã thử điều này? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
Ghasem Pahlavan

Câu trả lời:


5

Theo tập tin cấu hình, FPM không hỗ trợ gửi lỗi đến syslog.

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; in a local file.
; Note: the default prefix is /var
; Default Value: log/php-fpm.log
error_log = syslog

; syslog_facility is used to specify what type of program is logging the
; message. This lets syslogd specify that messages from different facilities
; will be handled differently.
; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON)
; Default Value: daemon
;syslog.facility = daemon

; syslog_ident is prepended to every message. If you have multiple FPM
; instances running on the same server, you can change the default value
; which must suit common needs.
; Default Value: php-fpm
;syslog.ident = php-fpm

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice

1

Bạn có chắc chắn về giả định của mình cho rsyslog.conf không? Đó là, bạn có chắc chắn tất cả các thông báo nhật ký hệ thống như vậy được gắn thẻ "php" chữ thường không?

Hãy thử đặt syslog.facility thành một cái gì đó như local2 (hoặc local1 hoặc local7) và thay thế dòng cấu hình rsyslog.conf của bạn theo đó:

local2.* /var/log/php-fpm/error.log

1

Khi bạn đang sử dụng php-fpm, nó sẽ xuất hiện để ghi đè php.inicài đặt.

Việc ghi nhật ký rất có thể cần phải được cấu hình trong .../www.conf.

Tôi đã bỏ ghi chú những dòng này để lấy các bản ghi PHP.

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

Người dùng và nhóm máy chủ web cũng có thể được tìm thấy trong tệp này dưới các dòng tương tự như thế này (có thể khác nhau giữa cấu hình unix socket & proxy).

listen.owner = www-data
listen.group = www-data

Sau đó, nó chỉ là vấn đề tạo tập tin và cấu hình nó đúng cách.

touch /var/log/php-errors.log
chmod 644 /var/log/php-errors.log
chgrp www-data /var/log/php-errors.log
chown www-data /var/log/php-errors.log

Tôi tin rằng mức độ nhật ký vẫn được sử dụng từ php-fpm.confđó vì vậy bạn cũng có thể cần kiểm tra điều này.

log_level = error
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.