frankenphp 本身不内置日志轮转,需依赖宿主环境:systemd 用户通过 journald.conf 的 maxretentionsec 等参数控制保留时长;docker 用户用 --log-opt max-size/max-file 控制数量与大小;文件重定向场景则需 logrotate 配置 rotate n 实现天级保留。

FrankenPHP 的日志轮转由底层系统服务控制
FrankenPHP 本身不内置日志保留策略,它默认将日志输出到 stdout / stderr,实际的日志文件切割、压缩和过期清理,取决于你用什么方式运行它——比如 systemd(最常见)、docker 或 supervisord。所以“设置旧日志保留时间”的操作不在 FrankenPHP 配置里,而在宿主环境的管理配置中。
systemd 用户:改 SystemMaxUse 和 MaxFileSec
如果你通过 systemd 启动 FrankenPHP(例如用 frankenphp.service),日志由 journald 接收。保留时间由 journald.conf 控制,关键参数是:
-
SystemMaxUse=:限制日志总磁盘占用(如100M),超出后自动删除最老日志 -
MaxFileSec=:单个日志文件最大存活时间(如2week),过期后归档或删除 -
MaxRetentionSec=:所有日志最长保留时间(如4week),优先级高于MaxFileSec
修改后需重启日志服务:sudo systemctl kill --signal=SIGHUP --kill-who=main systemd-journald,或直接 sudo systemctl restart systemd-journald。
Docker 用户:用 --log-opt 控制 JSON 日志
Docker 默认用 json-file 驱动存日志,FrankenPHP 容器的日志保留靠 Docker 引擎配置:
- 启动时指定:
docker run --log-opt max-size=10m --log-opt max-file=3 ...—— 这会保留最多 3 个 10MB 的日志文件 - 全局配置(
/etc/docker/daemon.json):{"log-driver":"json-file","log-opts":{"max-size":"20m","max-file":"5"}} - 注意:
json-file不支持按时间清理,只按大小+数量;如需按天清理,得挂载外部日志工具(如logrotate)或换用syslog/fluentd
自托管文件日志:手动配 logrotate
如果你把 FrankenPHP 的 stdout 重定向到文件(比如 frankenphp >> /var/log/frankenphp.log 2>&1),就得自己上 logrotate:
新建 /etc/logrotate.d/frankenphp:
/var/log/frankenphp.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644 www-data www-data
}
其中 rotate 7 表示保留最近 7 个归档文件,等效于 7 天;daily 是触发频率,不是保留粒度——真正决定“旧日志能留多久”的是 rotate N 值,而不是时间关键词。
容易忽略的是权限问题:create 指令必须匹配 FrankenPHP 进程写日志的用户(常为 www-data 或 nginx),否则轮转后新日志无法写入。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











