hyperf日志默认输出到文件,快速配置需明确目标(文件/syslog/stdout)+控制格式级别+适配系统管理;1.改logger.php用streamhandler写入/var/log/hyperf/app.log并设权限;2.启动时重定向至logger对接rsyslog;3.systemd托管时设standardoutput=journal自动接入journalctl;4.用logrotate或journald.conf限制日志大小与保留时间。

1. 调整 Hyperf 应用内日志配置(最常用)
编辑项目配置文件 config/autoload/logger.php:
- 将日志处理器设为
StreamHandler(默认),指定清晰路径,例如:'handler' => ['class' => StreamHandler::class, 'constructor' => ['/var/log/hyperf/app.log', Logger::DEBUG]] - 确保目录存在且权限正确:
sudo mkdir -p /var/log/hyperf && sudo chown www-data:www-data /var/log/hyperf(假设 Web 进程以www-data用户运行) - 如需 JSON 格式便于后续采集(如 Filebeat),启用
JsonFormatter:'formatter' => ['class' => JsonFormatter::class]
2. 输出到系统日志(rsyslog)——适合集中管理
无需修改 PHP 代码,通过系统级重定向实现:
- 启动 Hyperf 时将标准输出/错误重定向至
logger命令:php bin/hyperf.php start 2>&1 | logger -t hyperf-app - 确保 rsyslog 接收该标签日志:在
/etc/rsyslog.d/20-hyperf.conf中添加:if $programname == 'hyperf-app' then /var/log/hyperf/system.log & stop - 重启服务:
sudo systemctl restart rsyslog
3. 适配 systemd 服务时的日志集成
若用 systemd 托管 Hyperf(推荐生产环境):
- 创建服务单元文件
/etc/systemd/system/hyperf.service,关键项:StandardOutput=journal<br>StandardError=journal<br>SyslogIdentifier=hyperf
- 这样所有输出自动进入
journalctl,可直接查:journalctl -u hyperf -f或按优先级过滤:journalctl -u hyperf -p err - 无需额外配置日志路径,天然支持时间戳、进程 ID、单位名等元信息
4. 日志轮转与清理(防磁盘占满)
无论日志写入文件还是 journal,都应配置轮转:
- 对文件日志(如
/var/log/hyperf/app.log),新建/etc/logrotate.d/hyperf:/var/log/hyperf/*.log {<br> daily<br> missingok<br> rotate 30<br> compress<br> delaycompress<br> notifempty<br> create 644 www-data www-data<br> sharedscripts<br>} - 对 journal 日志,全局控制:
sudo mkdir -p /etc/systemd/journald.conf.d<br>echo '[Journal]\nSystemMaxUse=500M\nMaxRetentionSec=30day' | sudo tee /etc/systemd/journald.conf.d/limit.conf<br>sudo systemctl restart systemd-journald
INFO,调试阶段可临时调高(DEBUG),上线后建议回退,避免性能损耗和日志爆炸。











