frankenphp 默认不输出日志到终端,需在 frankenphp.yaml 中显式配置 logs: {access: stdout, error: stderr} 并设 log_level: debug,才能实时在终端看到请求和错误日志;stdout/stderr 为字面量,不支持 /dev/stdout 等路径。

FrankenPHP 默认不输出日志到终端,必须显式配置
FrankenPHP 启动后默认把 access_log 和 error_log 写入文件(如 logs/access.log),不会打印到 stdout 或 stderr。想在终端实时看到请求和错误,得手动改日志目标。
用 stdout 和 stderr 替换日志路径
在 frankenphp.yaml(或通过 -c 指定的配置文件)中,把日志路径设为 stdout / stderr:
logs: access: stdout error: stderr
注意:access 只支持 stdout,error 支持 stderr(也支持 stdout,但混在一起不易区分)
- 如果用
frankenphp run启动,该配置立即生效;用frankenphp server时也有效 - 不支持
/dev/stdout这类路径写法,只认字面量stdout和stderr - 若配置项缺失或拼写错误(比如写成
acess_log),FrankenPHP 会静默回退到默认文件路径,不会报错提示
启动时加 --log-level=debug 才能看到调试级日志
即使日志输出到了终端,info 级以下的日志(如 PHP var_dump()、未捕获异常细节)默认不显示。需要提升日志级别:
frankenphp run --log-level=debug- 或在
frankenphp.yaml中加log_level: debug -
debug级别会输出 PHP 错误堆栈、FastCGI 请求头、Worker 启停事件等 —— 但也会显著增加终端刷屏量 -
warn或error级别下,PHP 的trigger_error(E_USER_WARNING)仍可能被忽略,只有真正抛出的Exception或ParseError会被捕获并输出
容器环境里终端日志可能被截断或缓冲
在 Docker 中运行 FrankenPHP 时,即使配了 stdout,你也可能看不到实时日志,原因通常是:
- Docker 默认使用
json-file日志驱动,它会缓存小块输出;加--log-opt mode=non-blocking或在docker run时加-t(分配伪 TTY)能缓解 - PHP 自身的
output_buffering或implicit_flush不影响 FrankenPHP 的日志流,但会影响你echo的内容是否立刻出现在终端 —— 这和日志无关,别混淆 - 如果用
docker logs -f看不到任何输出,先检查frankenphp.yaml是否被正确挂载,以及logs:配置是否在顶层(不是嵌套在server:下)
最简验证方式:删掉所有配置,只留三行 logs: 块 + log_level: debug,然后 frankenphp run --config frankenphp.yaml —— 有请求进来就会立刻在终端刷出带时间戳的 access 行和 PHP 错误行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











