logging kesalahan nginx / php-fpm

16

Saya mencoba mencari tahu ke mana letak kesalahan PHP pada pengaturan saya. Aku sedang menjalankan nginx sebagai reverse proxy untuk PHP-FPM, tapi aku tidak melihat berbagai E_NOTICE atau E_WARNING pesan aplikasi saya memproduksi. Satu-satunya alasan saya tahu mereka sedang terjadi adalah respons yang gagal dan jejak tumpukan NewRelic catching.

Inilah konfigurasi logging:

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

Saya telah mengkonfigurasi PHP untuk masuk ke syslog, namun FPM tidak memiliki fungsi syslog sehingga ia masuk ke file. Saya tidak benar-benar peduli di mana kesalahan itu berakhir, hanya saja mereka berakhir di suatu tempat.

Adakah petunjuk tentang bagaimana saya bisa membuatnya bekerja?

Jeremy Wilson
sumber
Saya akan mencoba membuat tampilan kesalahan pertama (dalam file test.php Anda dapat secara manual memicu kesalahan), kemudian memasukkannya ke dalam file dan seterusnya .... Bisa jadi kesalahan yang dipicu berasal dari cli, sehingga menggunakan php.ini yang berbeda
adrian7
Apakah kamu mencoba ini? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
Ghasem Pahlavan

Jawaban:

5

Menurut file konfigurasi, FPM mendukung pengiriman kesalahan ke 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
dmuir
sumber
1

Anda yakin dengan asumsi Anda tentang rsyslog.conf? Yaitu, apakah Anda yakin semua pesan syslog tersebut ditandai dengan huruf kecil "php"?

Coba atur syslog.facility ke sesuatu seperti local2 (atau local1, atau local7) dan ganti rsyslog.conf Anda dengan config-line:

local2.* /var/log/php-fpm/error.log
Otheus
sumber
1

Saat Anda menggunakan php-fpm, sepertinya php.inipengaturan itu menggantikan .

Logging kemungkinan besar perlu dikonfigurasi di .../www.conf.

Saya menghapus komentar baris-baris ini untuk mengambil log PHP.

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

Pengguna dan grup server web juga dapat ditemukan dalam file ini di bawah baris yang mirip dengan ini (mungkin berbeda antara konfigurasi soket unix & proxy).

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

Maka itu hanya masalah membuat file dan mengkonfigurasi dengan benar.

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

Saya percaya level log masih digunakan dari php-fpm.confjadi Anda mungkin juga perlu memeriksa ini.

log_level = error
EternalHour
sumber