mirror of
https://github.com/infinite-iroha/touka.git
synced 2026-06-13 15:47:38 +08:00
feat: 引入 Logger 接口抽象,支持自定义日志实现
- 新增 Logger 接口定义,支持 zap/slog 等自定义实现 - 新增 CloserLogger 接口用于支持关闭操作 - Engine 新增 SetLogger/GetLogger 方法使用接口 - 新增 compat.go 兼容层,保留 reco 兼容方法 - 新增 slog 适配器示例 - 删除 zap 示例 - Context.GetLogger() 返回接口类型
This commit is contained in:
parent
58fd877ae2
commit
c8b14ef43a
7 changed files with 575 additions and 17 deletions
71
examples/logger_slog/main.go
Normal file
71
examples/logger_slog/main.go
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
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")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue