在 Ubuntu 上 PHP 日志“缺失”通常不是真的没产生,而是配置路径不对、权限不足、或错误被吞掉。下面按最常见原因逐一说明,并给出排查步骤。
不同方式,日志位置完全不同:
| 运行方式 | 常见日志位置 |
|---|---|
| CLI(命令行) | 通常无默认日志,依赖 php.ini |
| Apache + mod_php | Apache 错误日志 |
| Nginx + PHP-FPM | PHP-FPM 错误日志 |
| php artisan / cron | 取决于代码自身日志 |
检查:
php --ini
查看对应 php.ini:
log_errors = On
error_log = /var/log/php/php-error.log
如果 error_log 没设置:
✅ 解决:
sudo mkdir -p /var/log/php
sudo chown www-data:www-data /var/log/php
修改 php.ini 后重启:
sudo systemctl restart php8.1-fpm # 按版本
FPM 有自己日志:
/etc/php/8.1/fpm/php-fpm.conf
确认:
error_log = /var/log/php8.1-fpm.log
log_level = notice
重启:
sudo systemctl restart php8.1-fpm
即使日志写进去了,也可能:
检查:
ls -l /var/log/php
如果没文件:
sudo touch /var/log/php/php-error.log
sudo chown www-data:www-data /var/log/php/php-error.log
例如:
✅ 临时测试:
<?php
error_log("test log");
trigger_error("test error", E_USER_WARNING);
看是否出现在日志里。
error_reporting = E_ALL
display_errors = Off
否则:
如果是命令行 PHP:
journalctl -u php8.1-fpm
或:
php script.php 2>&1 | tee log.txt
php -i | grep error_log
ls -l /var/log/php
sudo systemctl status php8.1-fpm
tail -f /var/log/php8.1-fpm.log
你可以直接告诉我:
我可以给你精确到文件的配置示例。