在CentOS系统中,PHP日志分析是排查问题、优化性能的关键环节。以下从日志定位、基础查看、命令行分析、可视化工具、性能瓶颈排查、日志轮转等方面总结实用技巧:
PHP日志的路径取决于配置方式,常见位置包括:
/var/log/php-fpm/error.log(默认路径,需确认php-fpm.conf或www.conf中的error_log设置);/var/log/httpd/error_log(Apache作为前端时);/var/log/nginx/error.log(Nginx作为前端时);ini_set('error_log', '/path/to/custom.log')指定。若不确定路径,可通过以下命令查找:
php --ini | grep "Loaded Configuration File" # 获取php.ini路径
grep "error_log" /etc/php.ini # 查看error_log配置项
tail -f命令动态跟踪日志更新,适合排查实时问题(如错误突发):tail -f /var/log/php-fpm/error.log
cat或less命令查看整个日志文件(适合离线分析):cat /var/log/php-fpm/error.log
less /var/log/php-fpm/error.log # 支持翻页、搜索(按“/”键输入关键词)
grep命令过滤关键错误(如“error”“fatal”“timeout”),快速定位问题:grep -i "error" /var/log/php-fpm/error.log # 不区分大小写查找“error”
grep "PHP Fatal error" /var/log/httpd/error_log # 查找致命错误
通过awk、sort、uniq等命令组合,可统计高频错误、排序访问日志:
grep "error" /var/log/php-fpm/error.log | awk '{print $1, $2, $3, $4, $5}' | sort | uniq -c | sort -nr
awk '{print $7}' /var/log/nginx/access.log | cut -d'/' -f1-3 | sort | uniq -c | sort -nr
request_slowlog_timeout配置):grep 'POST' /var/log/php-fpm/access.log | awk '{print $0, $NF}' | cut -d' ' -f1-10 | sort | uniq -c | sort -nr
对于大规模日志,可使用工具实现可视化、交互式分析:
sudo yum install goaccess -y
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
性能问题需结合错误日志、慢查询日志、访问日志、PHP-FPM日志综合分析:
my.cnf配置):[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 1 # 超过1秒的查询视为慢查询
slowlog(慢请求日志),找出处理时间过长的PHP脚本;使用logrotate工具定期压缩、删除旧日志,配置文件位于/etc/logrotate.d/php-fpm(示例):
/var/log/php-fpm.log {
daily # 每日轮转
rotate 10 # 保留最近10个备份
compress # 压缩旧日志(如.gz格式)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root adm # 创建新日志的权限
postrotate
/usr/sbin/php-fpm -k # 轮转后重启PHP-FPM(重新打开日志文件)
endscript
}
手动触发轮转:
logrotate -f /etc/logrotate.d/php-fpm
通过rsyslog或syslog-ng将PHP日志发送到远程服务器,实现集中存储与管理:
/etc/rsyslog.conf,添加以下内容(将PHP日志发送到远程服务器192.168.1.100):local6.* @192.168.1.100:514 # UDP协议
# 或 local6.* @@192.168.1.100:514 # TCP协议(更可靠)
systemctl restart rsyslog
远程服务器需开启rsyslog的UDP/TCP监听端口(/etc/rsyslog.conf中取消#module(load="imudp")注释)。
以上技巧覆盖了CentOS PHP日志分析的全流程,从基础查看到期高级分析,可根据实际需求选择合适的方法。