From 898cb7242257dd73a91e656daebf304d1a0ef509 Mon Sep 17 00:00:00 2001 From: what Date: Fri, 21 Aug 2026 09:45:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Controller=20=E5=A2=9E=E5=8A=A0=20Logge?= =?UTF-8?q?r()=20=E6=96=B9=E6=B3=95=E4=B8=8E=E6=A0=87=E5=87=86=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=AD=97=E6=AE=B5=20key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Controller.Container() 改用 contracts 自己的 Injector 类型别名(跟 di.go 里其它地方一致),不直接暴露 do.Injector。新增 Logger() *slog.Logger 让 控制器可以拿到当前进程的默认 logger 记结构化日志;LogKeyKind/LogKeyComponent 定义了两个标准字段 key(控制器大类 + 具体实例/类型),供各类 handler 统一 用同一套日志字段命名。 --- controller.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/controller.go b/controller.go index b72c32f..b83104b 100644 --- a/controller.go +++ b/controller.go @@ -1,16 +1,25 @@ package contracts import ( + "log/slog" + "git.fsdpf.net/go/req" - "github.com/samber/do/v2" +) + +// 日志结构化字段的标准 key:LogKeyKind 标识控制器大类(Http/Cron/Job 等), +// LogKeyComponent 标识具体是哪一个实例/类型。 +const ( + LogKeyKind = "kind" + LogKeyComponent = "component" ) type Controller interface { // 初始化 Init() error // 获取 Container - Container() do.Injector + Container() Injector // 派遣一个任务 Dispatch(job string, payload any, u req.User) error + // Logger 返回当前进程的默认 slog logger + Logger() *slog.Logger } -