FrankenPHP 1.1 的 PHP 错误日志需同时配置 log_errors = On 和 error_log = 绝对路径(如 /var/log/frankenphp/php_errors.log),且二者必须在同一 php.ini 文件中;目录须存在并赋予运行用户写权限,否则日志无法生成。

FrankenPHP 1.1 的 PHP 错误日志不自动写入文件,必须显式配置 error_log 指向一个可写的绝对路径,并确保 log_errors = On 同时生效——两个指令缺一不可,且必须在同一份 php.ini 文件中。
✅ 正确配置 error_log 路径的三步操作
确认当前生效的 php.ini 路径:
运行frankenphp php-cli -i | grep "Loaded Configuration File",拿到真实加载的配置文件路径(例如/etc/php/8.3/cli/php.ini或/usr/local/etc/php/php.ini)。-
编辑该 php.ini,在
[PHP]段落下添加或修改两行:log_errors = On error_log = /var/log/frankenphp/php_errors.log
⚠️ 注意:
error_log必须是绝对路径;目录/var/log/frankenphp/需提前创建,且 FrankenPHP 进程运行用户(如www-data或root)对该路径有写权限。 -
重启 FrankenPHP 进程(或容器),再触发一个 PHP 错误(比如
<?php foobar(); ?>),检查目标日志文件是否生成并写入内容。立即学习“PHP免费学习笔记(深入)”;
❌ 常见失败原因与排查点
-
error_log写了相对路径(如php_errors.log)→ 写入位置不确定,极大概率失败 -
log_errors = On和error_log = ...分散在不同配置文件(如一个在php.ini,另一个在conf.d/custom.ini)→ 后者可能被忽略 - 目标路径不存在或权限不足 → 查看
ls -ld /var/log/frankenphp和stat /var/log/frankenphp/php_errors.log - Docker 容器未挂载日志目录 → 在
docker run中加-v /host/logs:/var/log/frankenphp - 使用了自定义启动脚本 → 检查是否重定向了 stderr(
2>/dev/null类操作会吞掉所有错误)
? 补充:想同时输出到文件 + 终端(开发调试用)
PHP 不支持多目标日志,但可通过 Linux 管道间接实现:
启动 FrankenPHP 时用 frankenphp server 2> >(tee -a /var/log/frankenphp/stderr.log),这样 stderr 既显示在终端,也追加进文件。注意这仅捕获 stderr,PHP 错误仍需 error_log = stderr 配合才有效。
不复杂但容易忽略



















