logger

package
v0.0.0-...-3c4a07b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 25, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Index

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
}

func NewLogger

func NewLogger(ctx context.Context, conf *Config) (l *slog.Logger, closeFunc func() error, errResult error)

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
}

func (*Config) SetDefaults

func (c *Config) SetDefaults()

SetDefaults 设置默认值

func (*Config) Validate

func (c *Config) Validate() error

Validate 验证配置是否有效

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

LogMode 实现 gorm logger.Interface

func (*GormAdapter) Trace

func (a *GormAdapter) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error)

Trace 实现 gorm logger.Interface,用于记录 SQL 执行信息

func (*GormAdapter) Warn

func (a *GormAdapter) Warn(ctx context.Context, msg string, data ...interface{})

Warn 实现 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 设置慢查询阈值

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL