发布于2026-07-20 阅读(0)
扫一扫,手机访问
在PHP的日常运维中,日志是排查问题最直接的线索。不过很多人容易把PHP自己的错误日志、PHP-FPM的错误日志以及慢查询日志搞混——虽然它们都跟PHP相关,但来源和用途完全不同。这里我们一次性把三种日志的配置和典型内容整理清楚。
先看配置。在php.ini中,通过error_log指定PHP错误日志的路径,比如:
error_log = /data/app_data/php/logs/php_errors.log
而在php-fpm.conf中,则可以分别设置PHP-FPM进程自身的错误日志和慢查询日志:
error_log = /data/app_data/php/logs/php-fpm_error.log
slowlog = /data/app_data/php/logs/php-fpm_slow.log
软件写好了,日志就会开始记录。下面我们看看实际运行中这些日志会吐出什么内容。
PHP错误日志(php_errors.log)主要记录PHP引擎启动时加载扩展失败、语法错误、运行时警告等。举个例子,如果你编译安装PHP时漏掉了某个扩展的动态库,就会看到类似这样的记录:
[29-Jan-2015 07:37:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/data/app_platform/php/lib/php/extensions/no-debug-non-zts-20100525/redis.so' - No such file or directory
注意这里的时间戳、警告级别、具体哪个扩展加载失败,路径信息都完整保留。如果多条连续报错,通常是多个扩展同时缺失,需要逐一排查。
PHP-FPM错误日志(php-fpm_error.log)记录的则是FPM进程本身的问题,比如子进程通信异常。一个典型的错误是:
[30-Jan-2015 10:32:25] ERROR: unable to read what child say: Bad file descriptor (9)
“Bad file descriptor”通常意味着文件描述符泄漏或连接异常,常见于高并发场景下。日志中这类错误可能会反复出现,甚至持续数小时,需要结合系统层面的ulimit和内核参数来定位。
PHP-FPM慢查询日志(php-fpm_slow.log)则更有针对性——它记录了执行时间超过request_slowlog_timeout阈值的请求堆栈。比如下面这个例子:
[11-Mar-2015 16:54:17] [pool www] pid 12873
script_filename = /data//index.php
[0x00007f497fa5b620] curl_exec() /data//Account.php:221
[0x00007f497fa5a4e0] call() /data/gintama_app/jidong/game_code/app/controllers/Game.php:31
[0x00007fff29eea180] load() unknown:0
[0x00007f497fa59e18] call_user_func_array() /data/library/BaseCtrl.php:20
[0x00007fff29eea470] handoutAction() unknown:0
[0x00007f497fa59400] run() /data//index.php:30
从堆栈信息里可以清楚看到,慢请求的瓶颈在curl_exec()调用——这意味着外部API请求耗时过长,导致整个请求被拖慢。定位到具体代码行(Account.php:221),优化方向就非常明确了。
总结一下:PHP错误日志帮你找扩展加载和语法问题,PHP-FPM错误日志帮你盯进程通信异常,慢查询日志则直接暴露哪些请求在“磨洋工”。三者配合使用,基本能覆盖大部分PHP应用问题。至于日志文件的位置,记得根据实际部署环境调整路径,别硬套示例里的路径。
上一篇:PHP内核探索:嵌入式PHP
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8