2013-08-10 7 views
7

FastCGI will nicht richtig PHP-Fehler protokollieren. Nun, das ist nicht ganz richtig: Es protokolliert Fehler gut, mit ein wenig Fiedeln; Es wird nur nichts anderes protokolliert, z. B. Warnungen.Nginx + FastCGI + PHP (PHP-FPM) nicht Protokollierung gefangen Fehler/Warnungen

Der berüchtigte FastCGI -> Fehler Nginx Protokoll ist kein Problem, unbedingt. Fehler und Warnungen von php-fpm gehen direkt zu Nginx - aber nur wenn sie nicht gefunden werden. Das heißt, wenn set_error_handler erfolgreich einen Fehler abfängt, wird kein Protokolleintrag angehängt. Dies bedeutet, dass ich Parse-Fehler sehen kann, aber das ist es auch schon.

php-fpm protokolliert keine PHP-Fehler von selbst (getrennt von nginx) ohne ein bisschen ein Hack. php-fpm Instanzkonfigurationsdatei enthält diese beiden Zeilen standardmäßig:

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

ich den error_log Pfad geändert, offensichtlich. Ich hatte die folgende Zeile hinzufügen, um es tatsächlich etwas zu melden Sie sich zu bekommen:

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

Version Anmerkung: der E_STRICT Teil ist unnötig, da ich PHP 5.3.27 bin mit, aber ich plane auf ein Upgrade auf 5.4 bei einigen Punkt. Mit dieser Zeile werden Fehler - und nur Fehler - in /mnt/log/php-fpm/default.log protokolliert. Jetzt setzt dies error_reporting auf den gleichen Wert, den ich in php.ini eingestellt habe, also ist hier offensichtlich etwas falsch. Außerdem werden gefangene Fehler nicht protokolliert: Das Verhalten ist identisch mit dem des nginx-Protokolls. Ich habe versucht, stattdessen den numerischen Wert (22527) zu verwenden, aber immer noch kein Glück.

I, in denen ist es egal, melden Sie sich die Einträge am Ende (nginx gegen php-fpm) Datei, aber ich habe gefangen Fehler müssen irgendwo angemeldet sein. Ich könnte meine eigenen Fehler- und Ausnahme-Handler verwenden, aber das ist ein bisschen hackisch, also würde ich das lieber vermeiden.

+1

Bin ich verrückt in Hinweis darauf, dass Apache nicht dieses Problem haben? – Zenexer

Antwort

5

Ich benutze diese Richtlinie in den Pool-Konfigurationsdatei für PHP-FPM:

catch_workers_output = yes

+1

Ich habe das eingestellt, aber es protokolliert immer noch nicht die gefangenen Fehler. – Zenexer

+0

@Zenexer haben Sie Berechtigungen für die Verzeichnisse und Dateien überprüft, die bei der Protokollierung verwendet werden? Sie sollten wahrscheinlich von 'root' gehört werden; 'chmod 0755' in Verzeichnissen und' chmod 0644' in Dateien. – parhamr

+0

Ja, die Berechtigungen sind in Ordnung. Alles gehört nginx und läuft als nginx. Es schreibt Zeug, einfach nicht alles. Ich denke, ich erwarte nur ein Verhalten, das nicht ausgestellt werden soll. Apache macht das Gleiche. – Zenexer