PHP内置服务器如何屏蔽访问日志仅保留error_log和syslog输出
屏蔽PHP内置开发服务器冗余日志的解决方案
PHP内置开发服务器的访问请求、socket连接类通知默认输出到标准输出流(stdout),而error_log()、运行时错误、syslog()(默认配置下)输出到标准错误流(stderr),两类输出流互相独立,通过流重定向即可实现你需要的过滤效果,无需使用-q参数。
方案1:直接重定向标准输出(最简便,推荐)
Linux/macOS 环境
执行以下启动命令即可:
php -c /usr/local/etc/php/8.0/php.ini -S 127.0.0.1:8080 index.php 1>/dev/null
1>/dev/null的作用是将标准输出流的所有内容丢弃,仅保留标准错误流的输出,冗余的访问、连接日志全部被屏蔽,你需要的error_log()、系统错误信息都能正常在终端显示。
Windows 环境
执行对应命令即可:
php -c 你的php.ini实际路径 -S 127.0.0.1:8080 index.php 1>nul
方案2:调试日志持久化存储
如果需要把调试日志归档保存,不直接输出到终端,可以将标准错误流重定向到指定文件:
php -c /usr/local/etc/php/8.0/php.ini -S 127.0.0.1:8080 index.php 1>/dev/null 2>./php_debug.log
后续查看日志直接读取php_debug.log文件即可。
补充说明
- 如果调整后发现
error_log()内容没有输出到终端,检查你的php.ini配置,确保log_errors = On且error_log = stderr即可。 syslog()函数默认会将日志写入系统日志,不受上述流重定向影响:- Linux环境可通过
/var/log/syslog或者journalctl命令查看对应日志 - macOS环境可通过控制台应用或者
/var/log/system.log查看
- Linux环境可通过
- 不使用
-q参数的原因是该参数会静默所有标准输出和标准错误的非启动信息,直接拦截掉error_log()的输出,不符合调试需求。
内容的提问来源于stack exchange,提问作者Kenny Wyland
相关产品推荐
相关产品推荐

