Documentation
¶
Index ¶
- func NewGormAdapter(logger *slog.Logger, opts ...GormAdapterOption) gormLogger.Interface
- func NewLogger(ctx context.Context, conf *Config) (l *slog.Logger, closeFunc func() error, errResult error)
- type Config
- type GormAdapter
- func (a *GormAdapter) Error(ctx context.Context, msg string, data ...interface{})
- func (a *GormAdapter) Info(ctx context.Context, msg string, data ...interface{})
- func (a *GormAdapter) LogMode(level gormLogger.LogLevel) gormLogger.Interface
- func (a *GormAdapter) Trace(ctx context.Context, begin time.Time, ...)
- func (a *GormAdapter) Warn(ctx context.Context, msg string, data ...interface{})
- type GormAdapterOption
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewGormAdapter ¶
func NewGormAdapter(logger *slog.Logger, opts ...GormAdapterOption) gormLogger.Interface
NewGormAdapter 创建一个新的 GORM 日志适配器
Example ¶
ExampleNewGormAdapter 演示如何将 slog.Logger 转换为 GORM logger
package main
import (
"log/slog"
"os"
"time"
"github.com/Twelveeee/golib/logger"
gormlogger "gorm.io/gorm/logger"
)
func main() {
// 创建一个 slog.Logger
slogger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
// 方式1: 使用默认配置
gormLogger := logger.NewGormAdapter(slogger)
_ = gormLogger
// 方式2: 使用自定义配置
gormLoggerCustom := logger.NewGormAdapter(
slogger,
logger.WithGormLogLevel(gormlogger.Info),
logger.WithSlowThreshold(500*time.Millisecond),
logger.WithIgnoreRecordNotFoundError(true),
)
_ = gormLoggerCustom
// 在 GORM 中使用
// db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
// Logger: gormLogger,
// })
}
Example (WithContext) ¶
ExampleNewGormAdapter_withContext 演示如何使用带上下文的日志记录
package main
import (
"context"
"log/slog"
"time"
"github.com/Twelveeee/golib/logger"
gormlogger "gorm.io/gorm/logger"
)
func main() {
ctx := context.Background()
// 使用 golib 的 logger 包创建 slog.Logger
conf := &logger.Config{
FileName: "./logs/app.log",
Level: slog.LevelInfo,
RotateRule: "daily",
MaxFileNum: 7,
BufferSize: 4096,
FlushDuration: 1000,
WriterTimeout: 3000,
}
slogger, closeFunc, err := logger.NewLogger(ctx, conf)
if err != nil {
panic(err)
}
defer func() { _ = closeFunc() }()
// 转换为 GORM logger
gormLogger := logger.NewGormAdapter(
slogger,
logger.WithGormLogLevel(gormlogger.Info),
logger.WithSlowThreshold(200*time.Millisecond),
)
// 在 GORM 中使用
// db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
// Logger: gormLogger,
// })
_ = gormLogger
}
Types ¶
type Config ¶
type Config struct {
// 日志文件名
// 如 log/service/service.log
FileName string `json:"fileName" yaml:"fileName"`
// 文件切分规则,如 1hour,1day,no,默认为1hour
RotateRule string `json:"rotateRule" yaml:"rotateRule"`
// 保留最多日志文件数,默认为48,若为-1,则不会清理
// 对于 FileName 所在目录下的 以FileName为前缀的文件将自动进行清理
// 清理后剩余文件数量,清理周期同 RotateRule
MaxFileNum int `json:"maxFileNum" yaml:"maxFileNum"`
// 日志内容待写缓冲队列大小
// 若<0, 则是同步的
// 若为0,则使用默认值4096
BufferSize int `json:"bufferSize" yaml:"bufferSize"`
// 日志进入待写队列超时时间,毫秒
// 默认为0,不超时,若出现落盘慢的时候,调用写日志的地方会出现同步等待
WriterTimeout int `json:"writerTimeout" yaml:"writerTimeout"`
// 日志落盘刷新间隔,毫秒
// 若<=0,使用默认值1000
FlushDuration int `json:"flushDuration" yaml:"flushDuration"`
// 日志等级
Level slog.Level `json:"level" yaml:"level"`
// contains filtered or unexported fields
}
type GormAdapter ¶
type GormAdapter struct {
// contains filtered or unexported fields
}
GormAdapter 将 slog.Logger 适配为 gorm.logger.Interface
func (*GormAdapter) Error ¶
func (a *GormAdapter) Error(ctx context.Context, msg string, data ...interface{})
Error 实现 gorm logger.Interface
func (*GormAdapter) Info ¶
func (a *GormAdapter) Info(ctx context.Context, msg string, data ...interface{})
Info 实现 gorm logger.Interface
func (*GormAdapter) LogMode ¶
func (a *GormAdapter) LogMode(level gormLogger.LogLevel) gormLogger.Interface
LogMode 实现 gorm logger.Interface
type GormAdapterOption ¶
type GormAdapterOption func(*GormAdapter)
GormAdapterOption 配置选项
func WithGormLogLevel ¶
func WithGormLogLevel(level gormLogger.LogLevel) GormAdapterOption
WithGormLogLevel 设置日志级别
func WithIgnoreRecordNotFoundError ¶
func WithIgnoreRecordNotFoundError(ignore bool) GormAdapterOption
WithIgnoreRecordNotFoundError 设置是否忽略 RecordNotFound 错误
func WithSlowThreshold ¶
func WithSlowThreshold(threshold time.Duration) GormAdapterOption
WithSlowThreshold 设置慢查询阈值
Click to show internal directories.
Click to hide internal directories.