定位日志文件与确认来源

先确认使用的是PHP-FPM还是mod_php(Apache),不同处理程序的日志路径不同。

常见路径与用途如下:

组件/场景日志类型典型路径说明
PHP-FPM错误日志/var/log/php-fpm/error.log运行时错误、警告
PHP-FPM访问日志/var/log/php-fpm/access.log请求记录(若启用)
PHP-FPM慢执行日志由slowlog配置项指定执行时间超过阈值的脚本
Apache+mod_php错误日志/var/log/httpd/error_logPHP错误通常写入此处
Apache+mod_php访问日志/var/log/httpd/access_logHTTP请求记录
Nginx+PHP-FPM错误日志/var/log/nginx/error.log与上游PHP-FPM交互错误
Nginx+PHP-FPM访问日志/var/log/nginx/access.logHTTP请求记录

若使用systemd,也可用journalctl查看服务日志:例如

journalctl-uphp-fpm
journalctl-uhttpd
。以上路径与方式适用于CentOS常见部署。

快速筛选命令

实时查看新增错误

PHP-FPM:

tail-f/var/log/php-fpm/error.log|grep-i"error\|fatal\|warning"

Apache:

tail-f/var/log/httpd/error_log|grep-i"php"

Nginx:

tail-f/var/log/nginx/error.log|grep-i"php\|upstream"

按时间窗口截取

示例(按日志内时间范围):

awk'/2025-11-2910:00:00/,/2025-11-2911:00:00/'/var/log/php-fpm/error.log

按关键字与上下文

含关键字前后各5行:

grep-C5"keyword"/var/log/httpd/error_log

按IP、URI、状态码筛选

某IP的访问:

grep'192.168.1.100'/var/log/nginx/access.log

某接口(如/api/login)的5xx错误:

grep'/api/login'/var/log/nginx/access.log|awk'$9>=500'

统计与排序

Top10最频繁URI:

awk'{print$7}'/var/log/nginx/access.log|sort|uniq-c|sort-nr|head-10

错误数按小时统计:

grep-i"error"/var/log/php-fpm/error.log|cut-d''-f1-2|uniq-c
以上命令可组合管道以满足多条件筛选。

按场景给出可直接使用的筛选命令

定位PHP致命错误与解析器错误

grep-E"PHP(Fatal|Parse)error"/var/log/php-fpm/error.log-A2-B2

找出执行慢的请求(PHP-FPM慢日志)

slowlog
已开启,直接按时间阈值筛选,例如阈值5秒:
awk'$4>5{print}'/path/to/php-fpm.slow.log

追踪某个URL的异常(跨访问与错误日志)

grep'/checkout.php'/var/log/nginx/access.log|awk'{print$1,$7,$9}'
grep-i"checkout.php"/var/log/php-fpm/error.log
联合排查

统计4xx/5xx比例

awk'{s[$9]++;total++;}END{for(kins)printf"%s:%d(%.2f%%)\n",k,s[k],s[k]/total*100}'/var/log/nginx/access.log

实时观察某接口的错误并高亮

tail-f/var/log/nginx/access.log|grep--line-buffered'/api/pay'|awk'$9>=400{print"\033[31m"$0"\033[0m"}'

仅输出匹配行的请求时间与方法

grep'login'/var/log/php-fpm/access.log|awk'{print$1,$2,$3,$6}'
上述命令覆盖错误、慢请求、访问异常与统计等常见场景。

确保日志可被筛选到

在php.ini中开启错误记录并写入文件(生产建议

display_errors=Off
):

error_reporting=E_ALL

display_errors=Off

log_errors=On

error_log=/var/log/php-fpm/error.log

修改后重启服务:

systemctlrestartphp-fpm

在PHP-FPM池配置(如www.conf)中启用慢日志并设置阈值:

slowlog=/var/log/php-fpm/www-slow.log

request_slowlog_timeout=5s

修改后重启:

systemctlrestartphp-fpm

确认Web服务器(Apache/Nginx)访问日志已开启并写入预期路径,以便从访问侧关联错误与请求。以上配置可确保错误、慢请求与访问记录落地,便于筛选与分析。

日志轮转与长期分析

使用logrotate对PHP-FPM、Apache、Nginx日志进行按日/按大小轮转,避免单文件过大影响筛选性能。

集中化与可视化:小规模可用GoAccess快速出报表;中大规模建议ELKStack(Elasticsearch+Logstash+Kibana)或Graylog做检索、告警与仪表盘。这些做法有助于长期保留与高效分析日志。