feat: 引入 Logger 接口抽象,支持自定义日志实现

- 新增 Logger 接口定义,支持 zap/slog 等自定义实现
- 新增 CloserLogger 接口用于支持关闭操作
- Engine 新增 SetLogger/GetLogger 方法使用接口
- 新增 compat.go 兼容层,保留 reco 兼容方法
- 新增 slog 适配器示例
- 删除 zap 示例
- Context.GetLogger() 返回接口类型
This commit is contained in:
wjqserver 2026-04-21 19:43:56 +08:00
parent 58fd877ae2
commit c8b14ef43a
7 changed files with 575 additions and 17 deletions

View file

@ -52,8 +52,14 @@ type Engine struct {
HTTPClient *httpc.Client // 用于在此上下文中执行出站 HTTP 请求
// LogReco 保留的 reco.Logger 字段
// Deprecated: 使用 SetLogger/GetLogger 替代
LogReco *reco.Logger
// logger 是新的日志接口,支持任意 Logger 实现
// 优先级: logger > LogReco
logger Logger
HTMLRender any // 用于 HTML 模板渲染,可以设置为 *template.Template 或自定义渲染器接口
routesInfo []RouteInfo // 存储所有注册的路由信息
@ -367,14 +373,27 @@ func (engine *Engine) SetHandleMethodNotAllowed(enable bool) {
engine.rebuildFallbackChains()
}
// SetLogger传入实例
func (engine *Engine) SetLogger(logger *reco.Logger) {
engine.LogReco = logger
// SetLogger 传入 Logger 接口实例
func (engine *Engine) SetLogger(logger Logger) {
engine.logger = logger
// 同步更新 LogReco 以保持向后兼容
if rl, ok := logger.(*reco.Logger); ok {
engine.LogReco = rl
} else {
engine.LogReco = nil
}
}
// 配置日志LoggerCfg
// GetLogger 返回 Logger 接口实例
func (engine *Engine) GetLogger() Logger {
return engine.logger
}
// SetLoggerCfg 使用 reco.Config 配置日志
func (engine *Engine) SetLoggerCfg(logcfg reco.Config) {
engine.LogReco = NewLogger(logcfg)
logger := NewLogger(logcfg)
engine.logger = logger
engine.LogReco = logger
}
// 设置自定义错误处理