2013-08-10 17 views
7

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ąć.

+1

jestem szalony w przypominając, że Apache nie ma tego problemu? – Zenexer

Odpowiedz

5

używam tej dyrektywy w pliku konfiguracyjnym basen dla PHP-FPM:

catch_workers_output = yes

+1

Mam ten zestaw, ale nadal nie rejestruje złapanych błędów. – Zenexer

+0

@Zenexer czy sprawdziłeś uprawnienia do katalogów i plików używanych w logowaniu? Powinny prawdopodobnie należeć do 'root'; 'chmod 0755' na katalogach i' chmod 0644' na plikach. – parhamr

+0

Tak, uprawnienia są w porządku. Wszystko jest własnością nginx i działa jako nginx. Pisze rzeczy, ale nie wszystko. Myślę, że po prostu oczekuję zachowania, które nie ma być eksponowane. Apache robi to samo. – Zenexer

Powiązane problemy