nginx / php-fpm错误记录


16

我试图找出我的安装程序中的PHP错误所在。我将nginx作为PHP-FPM的反向代理运行,但没有看到我的应用程序正在生成的各种E_NOTICEE_WARNING消息。我知道它们正在发生的唯一原因是响应失败和NewRelic捕获堆栈跟踪。

这是日志记录配置:

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

我已经将PHP配置为登录到syslog,但是FPM没有syslog功能,因此它正在记录到文件。我并不在乎错误在哪里结束,只是错误在哪里结束。

关于如何使它起作用的任何线索?


我会尝试先显示错误(在test.php文件中,您可以手动触发错误),然后将其放入文件中,依此类推...。可能是由于cli触发的错误,因此使用了不同的php.ini
adrian7

你有尝试过吗?php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] =启用
Ghasem Pahlavan

Answers:


5

根据配置文件,FPM确实支持将错误发送到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

1

您确定对rsyslog.conf的假设吗?也就是说,您确定所有此类syslog消息都用小写的“ php”标记吗?

尝试将syslog.facility设置为local2(或local1或local7),并相应地替换rsyslog.conf配置行:

local2.* /var/log/php-fpm/error.log

1

当您使用php-fpm时,它似乎会覆盖php.ini设置。

最有可能需要在中配置日志记录.../www.conf

我取消注释了这些行,以获取PHP日志。

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

Web服务器用户和组也可以在此文件的类似行下找到(Unix套接字和代理配置之间可能有所不同)。

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

然后,只需创建文件并正确配置它即可。

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

我相信日志级别仍在使用,php-fpm.conf因此您可能还需要检查一下。

log_level = error
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.