FrankenPHP 日志配置仅从 frankenphp.yaml 文件或命令行参数读取,不读取 php.ini 中的 error_log 或 log_errors;其自身运行时日志由 logs 块控制,支持 level、format、output 三项关键配置,修改后需重启生效。

FrankenPHP 的日志配置从哪读?
FrankenPHP 不读 PHP 的 error_log 或 log_errors 配置,它的运行时日志(如启动失败、HTTP 请求路由异常、PHP 进程崩溃)由自身二进制控制,配置来源只有两个地方:frankenphp.yaml(推荐)或命令行参数。没这个文件,就用默认行为——通常只输出到 stderr,不写文件。
frankenphp.yaml 里怎么配日志?
关键字段是 logs 块,它控制 FrankenPHP 自身日志(不是 PHP 应用的 error_log() 输出)。常见写法:
logs: level: debug format: json output: /var/log/frankenphp.log
其中:
-
level可选debug、info、warn、error;设太低(如debug)会影响吞吐,生产环境建议info起步 -
format为json时方便日志采集(如 Loki、ELK),text更适合人工快速扫 -
output设成文件路径才会落盘;设成stdout或留空,则只输出到终端/父进程 stdout
怎么确认当前生效的是哪个配置?
FrankenPHP 启动时会打印加载的配置路径和最终解析值,只要没加 --quiet 就能看到。最直接的办法是重启并观察启动输出:
立即学习“PHP免费学习笔记(深入)”;
frankenphp server --config ./frankenphp.yaml
如果看到类似这样的行,说明配置已加载:
INFO Using config file: /path/to/frankenphp.yaml
若没指定 --config,它会按顺序查找:./frankenphp.yaml → ./config/frankenphp.yaml → /etc/frankenphp/frankenphp.yaml。查不到就用内置默认——此时 logs.output 是 stdout,logs.level 是 info。
注意:修改 frankenphp.yaml 后必须重启进程,热重载不支持日志配置变更。
为什么看不到 PHP 应用里的 error_log()?
这是最容易混淆的点:FrankenPHP 的 logs 配置只管自己,不管 PHP 脚本输出。PHP 的错误日志仍走 PHP-FPM 传统逻辑——取决于 php.ini 中的 error_log 和 log_errors。如果想统一收集,得额外配置:
- 把 PHP 的
error_log指向和 FrankenPHP 相同的文件(需权限一致) - 或让 PHP 输出到
stderr(error_log = syslog+ rsyslog 转发),再由 systemd/journald 统一捕获
FrankenPHP 本身不会拦截或重定向 PHP 的 error_log() 调用。



















