在我们的 Apache 访问日志中,我们注意到用户偶尔会收到 500 错误。这很可能是 CodeIgniter 代码中的数据库查询问题。在看到错误之前,我们无法确定如何修复它。因此,我尝试将错误打印到错误日志中,但一直失败。我的情况如下:
- 在 Apache 的 php.ini 文件(/etc/php/7.2/apache2/php.ini)中打开错误日志记录,其中包含以下行:
log_errors = On
- CodeIgniter 中的错误报告设置为:
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
- 站点的 Apache vhosts 配置指定了一个错误日志 (/var/log/apache2/minans_error.log),其中填充了有关我们在 .htaccess 文件中阻止的 IP 的通知,但没有 500 错误。
- php.ini 中的错误最大长度已被设置为 0,具体行号为:
log_errors_max_len = 0
我在 CodeIgniter 中强制启用了 log_errors:
ini_set('log_errors', 1);
我将错误日志文件的权限更改为 666。
我使用以下命令强制 CodeIgniter 中的错误日志文件:
ini_set('error_log', '/var/log/apache2/minans_error.log');
我希望有人能告诉我哪里错了,建议尝试其他的方法,或者如果我误解了 Apache 记录错误的能力,请向我指出。
答案1
在测试中,我编写了一些带有 PHP 错误的测试代码。尝试加载页面时发生 500 错误,并且 PHP 错误被记录到错误日志中。
我们怀疑,用户收到的 500 个错误是数据库查询错误。此错误由 CodeIgniter 处理,不会触发 Apache 的错误日志记录。我在 CodeIgniter 的 config.php 文件中设置了$config['log_threshold'] = 1
。现在 CodeIgniter 会将捕获的错误记录到其application/logs
目录中。