Hyperf单机部署需配置按日期轮转、禁用大小触发、设置maxFiles=30自动清理、启用compress=true压缩、拆分access/sql/error多通道日志。

Hyperf单机部署时,日志不切割、不清理,很容易撑爆磁盘。核心不是加监控告警,而是从配置源头控制日志生成节奏和生命周期。
按日期轮转,禁用大小触发
默认 RotatingFileHandler 按文件大小切分,会导致同一天多个日志文件(如 hyperf.log.1、hyperf.log.2),既难追溯又易堆积。应强制改为按天切割:
- 在
config/autoload/logger.php的 handler 配置中,使用RotatingFileHandler - 设置
'filenameFormat' => 'hyperf-{date}.log',{date} 会自动替换为Y-m-d格式 - 显式设
'maxFileSize' => 0或直接移除该字段,关闭大小触发逻辑
限制保留天数,自动清理旧日志
只靠轮转不够,必须配保留策略,否则日志无限增长:
- 通过
'maxFiles' => 30控制最多保留最近 30 个日期文件(即 30 天) - 注意:该参数必须传入
constructor,否则默认值为 0,等于不清理 - 确保
runtime/logs/目录可写,否则轮转失败且无报错提示
启用压缩,降低存储占用
文本日志体积大,尤其开启 DEBUG 级别后。压缩能显著减小空间消耗:
- 添加
'compress' => true到 RotatingFileHandler 的 constructor 中 - 要求 Monolog ≥ 2.10,Hyperf 3.x 默认满足
- 压缩后文件名自动变为
hyperf-2026-08-12.log.gz,不影响轮转逻辑
拆分通道,隔离关键日志
把访问日志、SQL 日志、错误日志分开管理,避免单一文件爆炸:
- 定义多个 channel,例如
'access'、'sql'、'error' - 每个 channel 独立配 RotatingFileHandler,可设不同
maxFiles和filenameFormat - 调用时用
$loggerFactory->get('access', 'access')显式指定 channel,避免 fallback 到 default


















