2013-08-10 30 views
7

FastCGI không muốn ghi nhật ký lỗi PHP đúng cách. Vâng, đó không phải là hoàn toàn đúng sự thật: nó ghi lại các lỗi tốt, với một chút không quan trọng; nó sẽ không ghi lại bất cứ điều gì khác, chẳng hạn như cảnh báo.Nginx + FastCGI + PHP (php-fpm) không ghi nhật ký lỗi bị lỗi/cảnh báo

Lỗi nhật ký FastCGI -> khinx khét tiếng không phải là một vấn đề, nhất thiết. Lỗi và cảnh báo từ php-fpm đi thẳng đến Nginx - nhưng chỉ khi chúng không bị bắt. Tức là, nếu set_error_handler chặn thành công lỗi, không có mục nhập nhật ký nào được thêm vào. Điều này có nghĩa là tôi có thể thấy lỗi phân tích cú pháp, nhưng đó là về nó.

php-fpm không tự ghi nhật ký lỗi PHP (tách biệt với nginx) mà không có chút hack. tập tin cấu hình ví dụ php-fpm bao gồm hai dòng sau theo mặc định:

php_admin_value[error_log] = /mnt/log/php-fpm/default.log 
php_admin_flag[log_errors] = on 

tôi đã thay đổi con đường error_log, rõ ràng. Tôi phải thêm dòng sau đây để làm cho nó thực sự đăng nhập bất cứ điều gì:

php_admin_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT 

Version lưu ý: phần E_STRICT là không cần thiết, như tôi đang sử dụng PHP 5.3.27, nhưng tôi có kế hoạch nâng cấp lên 5.4 tại một số điểm. Với dòng này, nó ghi lại các lỗi - và chỉ các lỗi - đến /mnt/log/php-fpm/default.log. Bây giờ, điều này đặt error_reporting cho cùng một giá trị mà tôi đã đặt trong php.ini, do đó, một cái gì đó rõ ràng là sai ở đây. Ngoài ra, nó không ghi lại các lỗi bị bắt: hành vi này giống với hành vi của nhật ký nginx. Tôi đã thử sử dụng giá trị số (22527) thay vào đó, nhưng vẫn không có may mắn.

Tôi không quan tâm đến tệp nhật ký nào kết thúc (nginx so với php-fpm), nhưng tôi cần gặp lỗi để ghi lại ở đâu đó. Tôi có thể nghỉ mát để tiêm lỗi của riêng tôi và xử lý ngoại lệ, nhưng đó là một chút hackish, vì vậy tôi muốn tránh điều đó.

+1

Tôi điên trong nhớ lại rằng Apache không có vấn đề này? – Zenexer

Trả lời

5

tôi sử dụng chỉ thị này trong file cấu hình hồ bơi cho PHP-FPM:

catch_workers_output = yes

+1

Tôi đã thiết lập, nhưng nó vẫn không ghi lại các lỗi bị bắt. – Zenexer

+0

@Zenexer bạn đã kiểm tra quyền trên các thư mục và tệp được sử dụng trong ghi nhật ký chưa? Chúng có lẽ nên được sở hữu bởi 'root'; 'chmod 0755' trên các thư mục và' chmod 0644' trên các tệp. – parhamr

+0

Vâng, các điều khoản là tốt. Tất cả mọi thứ được sở hữu bởi nginx và chạy như nginx. Nó viết công cụ, không phải mọi thứ. Tôi nghĩ tôi chỉ mong đợi một hành vi không có nghĩa là được trưng bày. Apache cũng làm như vậy. – Zenexer

Các vấn đề liên quan