在Ubuntu上查PHP网站的运行日志,说简单也简单,说麻烦也麻烦,因为日志分散在几个地方。你打开终端,先别急着tail,先搞清楚你的PHP是怎么跑的:是Apache的mod_php,还是Nginx加PHP-FPM。这决定了你该去哪个目录翻。
Web服务器的日志是最先要看的。Apache的日志在/var/log/apache2/,error.log里经常混着PHP的报错,access.log记录所有请求。Nginx在/var/log/nginx/,error.log和access.log各一个。实时看用tail -f /var/log/nginx/error.log,想搜关键字用grep,比如grep "PHP Fatal error" /var/log/nginx/error.log。不过Nginx的error.log默认只记Nginx自己的错误,PHP的错误不一定在里面,所以还得看PHP-FPM。
PHP自身的错误日志由php.ini里的error_log决定。运行php --ini找到当前加载的配置文件,然后grep error_log那个文件。常见路径有/var/log/php_errors.log,或者/var/log/php/error.log。如果没设置,PHP错误可能直接输出到页面,或者被Web服务器记走。想确认,写个phpinfo()页面,搜error_log和log_errors。Ubuntu上apt装的PHP,配置文件在/etc/php/版本号/apache2/php.ini或/etc/php/版本号/fpm/php.ini。比如Ubuntu 22.04默认PHP 8.1,就是/etc/php/8.1/fpm/php.ini。改完重启服务:sudo systemctl restart php8.1-fpm。
PHP-FPM的日志更关键,尤其你网站跑在Nginx后面。它的error log和slow log位置在/etc/php/8.1/fpm/php-fpm.conf和pool配置里,默认可能是/var/log/php8.1-fpm.log。tail -f盯着它,能看到进程启动、警告、致命错误。如果开了slowlog,还能看到执行慢的脚本。另外,systemd管理的服务用journalctl -u php8.1-fpm -f看实时日志,这个命令很顺手,尤其当你不确定日志文件在哪时。
网站应用自己的日志也不能漏。Laravel写在storage/logs/laravel.log,WordPress在wp-content/debug.log(得先开WP_DEBUG_LOG)。这些进项目目录找,用find /var/www -name "*.log"能扫出来。查看时注意权限,日志文件通常属于www-data,你直接cat可能没权限,加sudo或者把自己加入adm组。

几个实用命令。实时跟踪多个日志:tail -f /var/log/nginx/error.log /var/log/php8.1-fpm.log。按时间过滤:grep "2025-01-15" /var/log/nginx/error.log。只看最后100行:tail -n 100。想高亮错误:grep --color=auto "error"。如果日志被logrotate切割了,会有error.log.1、error.log.2.gz,用zcat看压缩的。journalctl还能按时间范围:journalctl -u php8.1-fpm --since "1 hour ago"。
最后提醒一句,日志级别和路径都受配置影响,别死记路径。先php --ini,再找Web服务器配置里的error_log,基本就清楚了。看日志时保持tail -f开着,一边操作网站一边观察,比事后翻文件高效得多。如果实在找不到,用strace跟一下PHP进程,或者临时在代码里error_log()打点,也能定位。