使用 Nginx 在 PHP-FPM 7 上启用错误日志记录?

Nic*_*ick 10 nginx php-fpm php7 ubuntu-16.04

这与这些问题基本相同:

/sf/ask/607424541/

Nginx 不记录 PHP 错误

但是那里的答案似乎不适用于带有 PHP 7 的 Ubuntu 16.04。

/etc/php/7.0/fpm/pool.d/www.conf

catch_workers_output = yes
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
Run Code Online (Sandbox Code Playgroud)

/var/log/fpm-php.www.log存在并归www-data.

/etc/php/7.0/fpm/php.ini

log_errors = On
Run Code Online (Sandbox Code Playgroud)

Nginx 虚拟主机的服务器块

access_log /var/log/myapp/access.log;
error_log /var/log/myapp/error.log error;
Run Code Online (Sandbox Code Playgroud)

/var/log/myapp/access.log 存在并归www-data.

但是当发生错误时,我在任何指定的日志文件中都没有收到错误,并且在任何其他地方也找不到它。

我浏览了关于另一个问题的所有建议,但没有找到任何有效的答案。我假设自从这些答案发布以来,情况已经发生了变化。有什么建议?

Bri*_*yIE 6

上述评论the_nuts帮助解决这个问题对我来说。目录和文件不存在。

为了诊断,我补充说:

print("\n\n<br><br>log_errors: ".ini_get('log_errors'));
print("\n\n<br><br>error_log: ".ini_get('error_log'));
Run Code Online (Sandbox Code Playgroud)

到我的代码顶部(一个 WordPress 插件)。这输出:

log_errors: 1
error_log: /usr/local/etc/php-fpm.d/fpm.log 
Run Code Online (Sandbox Code Playgroud)

在终端中,我使用ls来了解丢失的文件和目录,即

ls /usr/local/etc/php-fpm.d/fpm.log
ls /usr/local/etc/php-fpm.d/
Run Code Online (Sandbox Code Playgroud)

输出

ls: cannot access '/usr/local/etc/php-fpm.d/fpm.log': No such file or directory
ls: cannot access '/usr/local/etc/php-fpm.d': No such file or directory
Run Code Online (Sandbox Code Playgroud)

修复:我将目录更改为/usr/local/etc创建目录,文件,然后将所有者设置为www-data:www-data

cd /usr/local/etc
sudo mkdir php-fpm.d
cd php-fpm.d
sudo touch fpm.log
sudo chown -R www-data:www-data fpm.log
Run Code Online (Sandbox Code Playgroud)

如果文件和目录确实存在,请运行

ls fpm.log -l
Run Code Online (Sandbox Code Playgroud)

如果所有者是 root:

-rw-r--r-- 1 root root 0 Jun 23 19:52 fpm.log
Run Code Online (Sandbox Code Playgroud)

sudo chown -R www-data:www-data fpm.log
Run Code Online (Sandbox Code Playgroud)

授予 Web 服务器所有权和写入权限

-rw-r--r-- 1 www-data www-data 12848 Jun 23 20:07 fpm.log
Run Code Online (Sandbox Code Playgroud)