ece2/hyperf-ext-sls

Aliyun SLS Monolog handler for Hyperf 3

Maintainers

Package info

github.com/ECE2/hyperf-ext-sls

pkg:composer/ece2/hyperf-ext-sls

Transparency log

Statistics

Installs: 14

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v2.0.0 2026-07-28 07:14 UTC

This package is auto-updated.

Last update: 2026-07-28 07:16:33 UTC


README

面向 Hyperf 3、PHP 8.1+ 和 Monolog 3 的阿里云日志服务 Handler。组件使用官方日志服务 SDK 的 PutLogs 接口,以 PB 格式、AccessKey 签名和压缩方式写入 Logstore,不需要开启 Web Tracking。

安装

composer require ece2/hyperf-ext-sls:^2.0
php bin/hyperf.php vendor:publish ece2/hyperf-ext-sls

发布命令只会创建 config/autoload/sls.php,不会覆盖应用现有的 logger.php

配置日志 Handler

将以下 Handler 合并到 config/autoload/logger.php 对应日志组的 handlers 中:

use Ece2\HyperfExtSls\SlsHandler;
use Monolog\Level;

return [
    'default' => [
        'handlers' => [
            [
                'class' => SlsHandler::class,
                'constructor' => [
                    'config' => config('sls'),
                    'level' => Level::Info,
                ],
            ],
        ],
    ],
];

至少需要配置以下环境变量:

SLS_ACCESS_KEY_ID=
SLS_ACCESS_KEY_SECRET=
SLS_ENDPOINT=https://cn-shanghai.log.aliyuncs.com
SLS_PROJECT=
SLS_LOG_STORE_NAME=
SLS_TOPIC=api_log
SLS_SOURCE=hyperf

使用 STS 临时凭据时可额外配置 SLS_SECURITY_TOKEN。生产环境应使用仅具有目标 Project、Logstore 写权限的 RAM 身份,不要使用主账号长期 AccessKey。

批量与连接池

  • 默认累计 100 条或等待 1 秒后调用一次 PutLogs
  • 达到批量阈值后在当前协程发送,不再为每条日志创建独立协程。
  • HTTP 传输使用当前客户端实例自己的 Hyperf PoolHandler,不会修改 Tea SDK 的进程级全局配置。
  • 连接池满时由当前日志调用自然等待,避免无限堆积发送协程。
  • 非协程环境会立即发送;Handler resetclose 时会刷新未满批次。
  • 发送失败的批次写入 SLS_FALLBACK_PATH,默认是 runtime/logs/hyperf.log

可按业务量调整:

SLS_BATCH_SIZE=100
SLS_FLUSH_INTERVAL=1
SLS_MAX_GUZZLE_CONNECTIONS=50
SLS_CONNECT_TIMEOUT=3
SLS_TIMEOUT=5
SLS_MAX_ATTEMPTS=3
SLS_RETRY_DELAY=0.1
SLS_MAX_FIELD_LENGTH=262144
SLS_MAX_BATCH_BYTES=2097152

若需要把同一生产者的数据固定路由到一个 Shard,可配置 SLS_SHARD_KEY;未配置时使用 SLS 负载均衡写入模式。并发请求仍可能按不同顺序到达,如业务要求严格顺序,还需在调用侧串行写入。

从 1.x 升级

2.x 是破坏性版本:

  • 只支持 Hyperf 3、Monolog 3 和 PHP 8.1+。
  • 从匿名 PutWebtracking 切换为鉴权 PutLogs,请关闭 Logstore 的 Web Tracking 开关。
  • 不再发布并覆盖 config/autoload/logger.php,需手动合并上方 Handler 配置。
  • context 和 Monolog Processor 写入的 extra 都会保存;数组和对象会转为 JSON 字符串。
  • 旧版如果曾在 vendor 内手动修改 write() 方法签名,升级后应删除该补丁并重新安装依赖。