FrankenPHP 默认不记录访问日志,需在 frankenphp.yaml 的 servers 下显式配置 log_access(绝对路径)或用 -log-access 命令行参数启用;日志格式固定且不自动轮转,须确保进程有写权限并配合 logrotate。

FrankenPHP 默认不记录访问日志
FrankenPHP 本身不内置 Apache 或 Nginx 那样的 access log 机制,它默认只把 PHP 错误和启动信息输出到 stderr(比如终端或 systemd journal),access.log 这类 HTTP 请求日志需要你主动配置。如果你在 frankenphp.yaml 或命令行里没显式启用,就完全不会产生访问日志。
用 log_access 启用并指定日志路径
FrankenPHP 提供了 log_access 配置项,支持写入文件或转发到 syslog。最常用的是写入本地文件:
# frankenphp.yaml
servers:
- host: localhost:8080
document_root: ./public
log_access: /var/log/frankenphp/access.log
-
log_access值必须是绝对路径,相对路径会被忽略(比如./access.log不生效) - 确保 FrankenPHP 进程对目标目录有写权限,否则日志静默失败(systemd journal 里可能看到
failed to open access log) - 日志格式固定为
remote_addr - remote_user [time_local] "request" status body_bytes_sent "http_referer" "http_user_agent",不可自定义
通过命令行临时开启(适合调试)
如果不用配置文件,也可以直接用 -log-access 参数启动:
frankenphp server -document-root ./public -host :8080 -log-access /tmp/franken-access.log
- 参数名是
-log-access(注意是短横线,不是下划线) - 与配置文件互斥:命令行参数优先级高于
frankenphp.yaml中的log_access - 日志文件不会自动轮转,长期运行需配合
logrotate或用systemd的StandardOutput=append:/path替代
日志没生成?先检查这几个点
常见“开了但没日志”的原因不是配置错,而是环境卡点:
立即学习“PHP免费学习笔记(深入)”;
- 进程用户(如
www-data)对/var/log/frankenphp/目录无写权限 —— 用sudo -u www-data touch /var/log/frankenphp/test验证 - SELinux 或 AppArmor 启用时拦截了文件写入 —— 查
sudo ausearch -m avc -ts recent或journalctl -u frankenphp | grep avc - 配置写在了错误层级:必须放在
servers列表项下,不能放在根节点或php块里 - HTTP 请求根本没进 FrankenPHP —— 比如前端反向代理(Nginx)把请求拦了,或端口监听失败导致请求被拒绝
日志路径和权限问题比语法错误更常导致静默失效,别急着重写配置,先看进程能不能碰那个文件。



















