mirror of
https://github.com/infinite-iroha/touka.git
synced 2026-06-13 15:47:38 +08:00
- 新增 Logger 接口定义,支持 zap/slog 等自定义实现 - 新增 CloserLogger 接口用于支持关闭操作 - Engine 新增 SetLogger/GetLogger 方法使用接口 - 新增 compat.go 兼容层,保留 reco 兼容方法 - 新增 slog 适配器示例 - 删除 zap 示例 - Context.GetLogger() 返回接口类型
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/infinite-iroha/touka"
|
|
)
|
|
|
|
// SlogAdapter 将 slog.Logger 适配到 touka.Logger 接口
|
|
type SlogAdapter struct {
|
|
logger *slog.Logger
|
|
}
|
|
|
|
func NewSlogAdapter(handler slog.Handler) *SlogAdapter {
|
|
return &SlogAdapter{
|
|
logger: slog.New(handler),
|
|
}
|
|
}
|
|
|
|
func (s *SlogAdapter) Debugf(format string, args ...any) {
|
|
s.logger.Debug(fmt.Sprintf(format, args...))
|
|
}
|
|
|
|
func (s *SlogAdapter) Infof(format string, args ...any) {
|
|
s.logger.Info(fmt.Sprintf(format, args...))
|
|
}
|
|
|
|
func (s *SlogAdapter) Warnf(format string, args ...any) {
|
|
s.logger.Warn(fmt.Sprintf(format, args...))
|
|
}
|
|
|
|
func (s *SlogAdapter) Errorf(format string, args ...any) {
|
|
s.logger.Error(fmt.Sprintf(format, args...))
|
|
}
|
|
|
|
func (s *SlogAdapter) Fatalf(format string, args ...any) {
|
|
s.logger.Error(fmt.Sprintf(format, args...))
|
|
os.Exit(1)
|
|
}
|
|
|
|
func (s *SlogAdapter) Panicf(format string, args ...any) {
|
|
s.logger.Error(fmt.Sprintf(format, args...))
|
|
panic(fmt.Sprintf(format, args...))
|
|
}
|
|
|
|
func main() {
|
|
engine := touka.New()
|
|
|
|
// 使用 slog 替换默认的 reco.Logger
|
|
handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
|
|
Level: slog.LevelDebug,
|
|
})
|
|
slogAdapter := NewSlogAdapter(handler)
|
|
engine.SetLogger(slogAdapter)
|
|
|
|
engine.GET("/", func(c *touka.Context) {
|
|
c.Infof("request received: %s", c.Request.URL.Path)
|
|
c.JSON(http.StatusOK, map[string]string{"message": "hello"})
|
|
})
|
|
|
|
// 也可以获取 Logger 接口
|
|
logger := engine.GetLogger()
|
|
logger.Debugf("engine started")
|
|
|
|
// 也可以直接使用 slog
|
|
slog.Info("Server running", "addr", ":8080")
|
|
// engine.Run(":8080")
|
|
}
|