7.2 KiB
7.2 KiB
todos:
- id: "migrate-log-calls" content: "13 个文件:LoggerService::info/error/warning → support\Log,统一 context 为 array" status: pending
- id: "migrate-trace-timing" content: "InnerCurlService / OutputService / EventBus:改用 Context + TraceIdMiddleware::initContext" status: pending
- id: "delete-logger-service" content: "删除 LoggerService.php,更新 README §8.1" status: pending
- id: "fix-handler-syntax" content: "修复 app/exception/Handler.php 末尾多余花括号" status: pending
- id: "verify" content: "grep 无残留引用 + 跑 report.sh + CLI/HTTP/MQ 冒烟" status: pending isProject: false
slot_agent 废弃 LoggerService 完整迁移
结论
可以不再使用 LoggerService 写日志,但不能「只配好 config/log.php 就删类」——当前仍有 13 个文件、约 56 处 LoggerService:: 调用,且 3 处依赖其 trace/timing 工具方法。
你已有的新栈已覆盖旧能力:
| 能力 | LoggerService(旧) | 新配置 |
|---|---|---|
| 落盘 | 直接 SeasLog::* |
config/log.php → SeasLogHandler |
| traceId | $_SERVER['TRACE_ID'] 手动拼进 message |
TraceIdMiddleware → Context::get('trace_id') + SeasLog::setRequestID |
| 调用位置 | debug_backtrace 手动 JSON |
IntrospectionProcessor(已排除 support\Log) |
| 请求耗时 | $_SERVER['REQUEST_TIME_FLOAT'](HTTP 几乎未初始化) |
Context::get('request_time')(Middleware 已写入) |
当前项目处于 双轨并存,会导致同一次请求里日志格式、trace 来源不一致:
- 已用
support\Log:AuthMiddleware、RabbitMqService、Test - 仍用
LoggerService:EventBus、各 Service/Logic、Exception Handler 等
flowchart LR
subgraph old [旧路径]
LS[LoggerService] --> SeasLogDirect[SeasLog 直连]
LS --> ServerTrace["$_SERVER TRACE_ID"]
end
subgraph new [新路径]
LogFacade["support\\Log"] --> Monolog[Monolog]
Monolog --> Handler[SeasLogHandler]
Handler --> SeasLogCtx[SeasLog + Context trace_id]
TraceMW[TraceIdMiddleware] --> Context[Context]
end
迁移范围(按职责)
1. 写日志:统一改为 support\Log
涉及文件(全部在 slot_agent/app/ 下):
command/EventBus.php(15 处)innerapi/logic/AgentLogic.phpservice/ReferralRewardConfigService.php(9 处)service/InnerCurlService.php(8 处日志)service/UserReferralGatewayService.phpservice/ReferralRewardService.phpservice/activity/UserAgentRegisterService.phpservice/LuckyRewardInviteCallbackGatewayService.phpservice/ShareConfigService.phpexception/Handler.phpinnerapi/exception/Handler.php
替换约定(与现有 AuthMiddleware 对齐):
// 旧
LoggerService::info(__METHOD__, $payload);
// 新 — context 必须是 array,标量包一层
Log::info(__METHOD__, is_array($payload) ? $payload : ['msg' => $payload]);
// 旧 — Throwable
LoggerService::error(__METHOD__, $exception);
// 新 — 与 AuthMiddleware 一致
Log::error($exception);
// 或需要业务前缀时:
Log::error(__METHOD__, ['msg' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine()]);
CLI/MQ 消费若需独立 trace,在 handler 入口调用一次:
use Slot\Foundation\Middleware\TraceIdMiddleware;
TraceIdMiddleware::initContext(); // 替代 LoggerService::initGenerateTraceId()
EventBus::deal() 第 59 行即此处。
2. trace / timing:改用 Context,不再读 $_SERVER
| 文件 | 旧 API | 新 API |
|---|---|---|
InnerCurlService |
LoggerService::getTraceId() |
Context::get('trace_id');空则 TraceIdMiddleware::initContext() 后再取 |
OutputService |
LoggerService::getRequestTime() |
Context::get('request_time', microtime(true)),timing = microtime(true) - $start |
EventBus |
initGenerateTraceId() |
TraceIdMiddleware::initContext() |
TRACE_CHILD_ID / setChildId / initRequestTime 在 slot_agent 无任何调用,删除 LoggerService 时一并移除即可。
3. 删除与文档
- 删除
app/service/LoggerService.php - 更新
README.md§8.1:由「统一LoggerService」改为「统一support\Log+Context trace_id」 - 保留
AppBootStrap:仍负责 SeasLog 按 worker 分目录(cli/webman),与SeasLogHandler互补
4. 顺带修复(改 Handler 时)
app/exception/Handler.php 文件末尾有多余 {\n\n},迁移时一并去掉,避免语法问题。
不需要改动的部分
config/log.php— 已就绪config/middleware.php—TraceIdMiddleware已在最前config/process.php— 已注入Log::channel('default')
验证
- 跑 completion report:
SLOT_ROOT=/Users/ray/Documents/project/www/slot/slot_agent ~/.cursor/skills/slot-backend-completion-report/scripts/report.sh - 手动冒烟:
- HTTP:
AuthMiddleware已有Log::info,确认runtime/logs/webman/含 trace + 调用栈 - CLI:
php webman test(Test.php已有 Log 示例) - MQ:
event:bus消费一条消息,确认 CLI 日志有独立 trace_id
- HTTP:
- 确认全仓库
slot_agent内无LoggerService引用
风险与注意
- 日志格式会变:旧格式为
trace_id|Class::method | json {"file":...}单行;新格式由SeasLogLineFormatter+IntrospectionProcessor决定。若 ELK/告警规则按旧格式解析,需同步调整。 - 跨服务 trace 传递:
InnerCurlService请求头traceId应改为传Context::get('trace_id'),与TraceIdMiddleware一致(不再用trace_id:xxx前缀的 uniqid 格式)。 - OutputService timing 行为会修正:HTTP 请求将正确使用 Middleware 写入的
request_time,不再依赖几乎未初始化的REQUEST_TIME_FLOAT。