touka/logreco.go
wjqserver c8b14ef43a feat: 引入 Logger 接口抽象,支持自定义日志实现
- 新增 Logger 接口定义,支持 zap/slog 等自定义实现
- 新增 CloserLogger 接口用于支持关闭操作
- Engine 新增 SetLogger/GetLogger 方法使用接口
- 新增 compat.go 兼容层,保留 reco 兼容方法
- 新增 slog 适配器示例
- 删除 zap 示例
- Context.GetLogger() 返回接口类型
2026-04-21 19:43:56 +08:00

55 lines
1.3 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
// Copyright 2024 WJQSERVER. All rights reserved.
// All rights reserved by WJQSERVER, related rights can be exercised by the infinite-iroha organization.
package touka
import (
"log"
"os"
"time"
"github.com/fenthope/reco"
)
// 默认LogReco配置
var defaultLogRecoConfig = reco.Config{
Level: reco.LevelInfo,
Mode: reco.ModeText,
TimeFormat: time.RFC3339,
Output: os.Stdout,
Async: true,
DefaultFields: nil,
}
func NewLogger(logcfg reco.Config) *reco.Logger {
logger, err := reco.New(logcfg)
if err != nil {
log.Printf("New Logreco Error: %s", err)
return nil
}
return logger
}
func CloseLogger(logger *reco.Logger) {
err := logger.Close()
if err != nil {
log.Printf("Close Logreco Error: %s", err)
return
}
}
// CloseLogger 关闭 Engine 的日志实现
// 如果 logger 实现了 CloserLogger 接口,会调用其 Close 方法
func (engine *Engine) CloseLogger() {
if cl, ok := engine.logger.(CloserLogger); ok {
if err := cl.Close(); err != nil {
log.Printf("Close Logger Error: %s", err)
}
return
}
// 兼容旧代码
if engine.LogReco != nil {
CloseLogger(engine.LogReco)
}
}