在 Ubuntu 上分析 PHP 日志,通常分为 定位日志文件 → 选择分析方式 → 结合常见问题排查 三步。下面系统性地说一下。
PHP 本身的错误日志位置由 php.ini 决定:
php --ini
查看:
error_log = /var/log/php/php-error.log
或:
error_log = /var/log/apache2/php_errors.log
如果没有设置,PHP 错误可能会写入 Web 服务器日志。
/var/log/apache2/error.log
/var/log/apache2/access.log
查看:
tail -f /var/log/apache2/error.log
PHP-FPM 日志:
/var/log/php-fpm.log
/var/log/php8.1-fpm.log # 版本相关
Nginx 错误日志:
/var/log/nginx/error.log
/var/log/nginx/access.log
常见位置:
/var/www/html/storage/logs/laravel.log
/var/www/html/runtime/log/
tail -f /var/log/php/php-error.log
grep -E "Fatal error|Parse error|Warning|Notice" /var/log/php/php-error.log
grep "2026-01-21" /var/log/php/php-error.log
awk '{print $1}' /var/log/php/php-error.log | sort | uniq -c | sort -nr
grep "500" /var/log/nginx/access.log
PHP Fatal error: Uncaught Error: Class 'X' not found
→ 类未加载 / autoload 问题
failed to open stream: Permission denied
→ 文件权限或 www-data 用户问题
Allowed memory size exhausted
→ 调整 memory_limit
Maximum execution time exceeded
→ 脚本太慢或死循环
编辑:
sudo nano /etc/php/8.1/cli/php.ini
# 或 fpm 版本
sudo nano /etc/php/8.1/fpm/php.ini
建议配置:
display_errors = Off
log_errors = On
error_log = /var/log/php/php-error.log
error_reporting = E_ALL
重启:
sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx
goaccess:可视化 access 日志lnav:日志聚合查看如果你愿意,可以:
我可以直接帮你分析具体错误原因。