FastCGI nie chce poprawnie rejestrować błędów PHP. Cóż, to nie do końca prawda: loguje błędy dobrze, z odrobiną skrzypienia; po prostu nie będzie rejestrować niczego innego, na przykład ostrzeżeń.Nginx + FastCGI + PHP (php-fpm) nie rejestruje złapanych błędów/ostrzeżeń
Osławiony błąd FastCGI -> Nginx nie jest problemem, koniecznie. Błędy i ostrzeżenia od php-fpm idą prosto do Nginx - ale tylko wtedy, gdy są nieprzechwycone. Oznacza to, że jeśli set_error_handler
skutecznie przechwyci błąd, nie zostanie dołączony żaden wpis dziennika. Oznacza to, że widzę błędy analizy, ale to wszystko.
php-fpm nie rejestruje błędów PHP samodzielnie (niezależnie od nginx) bez odrobiny hackowania. Plik konfiguracyjny instancji php-fpm zawiera domyślnie następujące linie:
php_admin_value[error_log] = /mnt/log/php-fpm/default.log
php_admin_flag[log_errors] = on
Zmieniłem oczywiście ścieżkę error_log. Musiałem dodać następujący wiersz, aby uzyskać to, aby faktycznie coś się zalogować:
php_admin_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT
Wersja uwaga: część E_STRICT jest niepotrzebna, ponieważ używam PHP 5.3.27, ale mam zamiar modernizacji do 5,4 na niektóre punkt. W tym wierszu rejestruje błędy - i tylko błędy - na /mnt/log/php-fpm/default.log
. Teraz ustawia error_reporting
na tę samą wartość, którą ustawiłem w php.ini, więc coś tutaj jest oczywiście błędne. Ponadto nie rejestruje błędów przechwyconych: zachowanie jest identyczne jak w dzienniku nginx. Próbowałem zamiast tego użyć wartości numerycznej (22527), ale wciąż nie miałem szczęścia.
Nie obchodzi mnie, w którym pliku logu pojawią się wpisy (nginx kontra php-fpm), ale potrzebuję złapanych błędów, aby gdzieś się zalogować. Mógłbym uciekać się do wstrzykiwania moich własnych programów obsługi błędów i wyjątków, ale to trochę hackowate, więc wolałbym tego uniknąć.
jestem szalony w przypominając, że Apache nie ma tego problemu? – Zenexer