slog

package module
v0.0.22 Latest Latest
Warning

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

Go to latest
Published: Nov 10, 2024 License: MIT Imports: 20 Imported by: 7

README

slog

PkgGoDev Go Report Card MIT License

slog 是一个高性能、功能丰富的 Go 语言日志库,基于 Go 1.21+ 的官方 log/slog 包进行扩展。它提供了更灵活的日志级别控制、彩色输出、结构化日志记录、日志脱敏等高级特性。

特性

  • 支持多种日志级别(Trace、Debug、Info、Warn、Error、Fatal)
  • 支持同时输出文本和 JSON 格式
  • 支持彩色日志输出
  • 支持动态调整日志级别
  • 支持日志分组和模块化
  • 支持结构化字段记录
  • 支持日志脱敏处理
  • 高性能缓冲设计
  • 线程安全
  • 支持自定义格式化

安装

go get github.com/darkit/slog

快速开始

package main

import (
	"os"
	"github.com/darkit/slog"
)

func main() {
	// 创建默认logger
	logger := slog.NewLogger(os.Stdout, false, false)

	// 基础日志记录
	logger.Info("Hello Slog!")

	// 带结构化字段的日志
	logger.Info("User logged in",
		"user_id", 123,
		"action", "login",
	)
}

核心功能使用

1. 日志级别控制
// 设置全局日志级别
slog.SetLevelDebug()  // Debug级别
slog.SetLevelInfo()   // Info级别
slog.SetLevelWarn()   // Warn级别
slog.SetLevelError()  // Error级别
slog.SetLevelFatal()  // Fatal级别
slog.SetLevelTrace()  // Trace级别

// 动态更新日志级别
slog.UpdateLogLevel("debug")           // 使用字符串
slog.UpdateLogLevel(slog.LevelDebug)   // 使用Level类型
slog.UpdateLogLevel(-4)                // 使用数字

// 监听日志级别变化
slog.WatchLevel("observer1", func(level slog.Level) {
fmt.Printf("Log level changed to: %v\n", level)
})

// 取消监听
slog.UnwatchLevel("observer1")
2. 日志记录方法
// 不同级别的日志记录
logger.Trace("Trace message")
logger.Debug("Debug message")
logger.Info("Info message")
logger.Warn("Warning message")
logger.Error("Error message")
logger.Fatal("Fatal message") // 会导致程序退出

// 格式化日志
logger.Debugf("User %s logged in from %s", username, ip)
logger.Infof("Process took %d ms", time)
logger.Warnf("High CPU usage: %.2f%%", cpuUsage)
logger.Errorf("Failed to connect: %v", err)
logger.Fatalf("Critical error: %v", err)

// 带结构化字段的日志
logger.Info("Database connection established",
"host", "localhost",
"port", 5432,
"user", "admin",
)
3. 日志分组和模块
// 创建模块化日志记录器
userLogger := slog.Default("user")
authLogger := slog.Default("auth")

// 使用分组
logger := slog.WithGroup("api")
logger.Info("Request received",
"method", "GET",
"path", "/users",
)

// 链式调用
logger.With("request_id", "123").
WithGroup("auth").
Info("User authenticated")
4. 输出格式控制
// 启用/禁用文本日志
slog.EnableTextLogger()
slog.DisableTextLogger()

// 启用/禁用JSON日志
slog.EnableJsonLogger()
slog.DisableJsonLogger()

// 创建带颜色的控制台日志
logger := slog.NewLogger(os.Stdout, false, true) // 最后一个参数控制是否显示源代码位置
5. 日志脱敏
// 启用日志脱敏
slog.EnableDLPLogger()

// 禁用日志脱敏功能
slog.DisableDLPLogger()

// 使用脱敏日志
logger.Info("User data",
"credit_card", "1234-5678-9012-3456", // 将被自动脱敏
"phone", "13800138000",               // 将被自动脱敏
)
6. 高级功能
// 获取日志记录通道
recordChan := slog.GetChanRecord(1000) // 指定缓冲大小

// 自定义属性
logger.With(
slog.String("app", "myapp"),
slog.Int("version", 1),
slog.Time("start_time", time.Now()),
).Info("Application started")

// 获取原始slog.Logger
slogLogger := logger.GetSlogLogger()

日志文件管理

slog 提供了日志文件管理功能,支持日志文件的自动轮转、压缩和清理。

基础用法
// 创建日志文件写入器
writer := slog.NewWriter("logs/app.log")

// 创建日志记录器
logger := slog.NewLogger(writer, false, false)

// 开始记录日志
logger.Info("Application started")
文件写入器配置
writer := slog.NewWriter("logs/app.log").
SetMaxSize(100).      // 设置单个文件最大为100MB
SetMaxAge(7).         // 保留7天的日志
SetMaxBackups(10).    // 最多保留10个备份
SetLocalTime(true).   // 使用本地时间
SetCompress(true)     // 压缩旧日志文件
文件写入器特性
  • 自动轮转: 当日志文件达到指定大小时自动创建新文件
  • 时间戳备份: 备份文件名格式为 原文件名-时间戳.扩展名
  • 自动压缩: 可选择自动压缩旧的日志文件
  • 自动清理: 支持按时间和数量清理旧日志
  • 目录管理: 自动创建日志目录结构
  • 错误处理: 优雅处理文件操作错误
配置选项
方法 默认值 描述
SetMaxSize(size int) 100 单个日志文件的最大大小(MB)
SetMaxAge(days int) 30 日志文件保留的最大天数
SetMaxBackups(count int) 30 保留的最大备份文件数
SetLocalTime(local bool) true 是否使用本地时间
SetCompress(compress bool) true 是否压缩旧日志文件
文件命名规则
  • 当前日志文件: app.log
  • 备份文件: app-2024-03-20T15-04-05.log
  • 压缩文件: app-2024-03-20T15-04-05.log.gz
目录结构示例
logs/
  ├── app.log                           # 当前日志文件
  ├── app-2024-03-20T15-04-05.log       # 未压缩的备份
  └── app-2024-03-19T15-04-05.log.gz    # 压缩的备份

方法列表

全局方法
方法 描述
NewLogger(w io.Writer, noColor, addSource bool) Logger 创建新的日志记录器
Default(modules ...string) *Logger 获取带模块名的默认日志记录器
SetLevel{Level}() 设置全局日志级别(Level可以是Trace/Debug/Info/Warn/Error/Fatal)
UpdateLogLevel(level interface{}) error 动态更新日志级别
WatchLevel(name string, callback func(Level)) 监听日志级别变化
UnwatchLevel(name string) 取消日志级别监听
EnableTextLogger() 启用文本日志输出
DisableTextLogger() 禁用文本日志输出
EnableJsonLogger() 启用JSON日志输出
DisableJsonLogger() 禁用JSON日志输出
EnableFormatters(formatters ...formatter.Formatter) 启用日志格式化器
Logger方法
方法 描述
Debug/Info/Warn/Error/Fatal/Trace(msg string, args ...any) 记录不同级别的日志
Debugf/Infof/Warnf/Errorf/Fatalf/Tracef(format string, args ...any) 记录格式化的日志
With(args ...any) *Logger 创建带有额外字段的日志记录器
WithGroup(name string) *Logger 创建带有分组的日志记录器
GetLevel() Level 获取当前日志级别
SetLevel(level Level) *Logger 设置当前记录器的日志级别
GetSlogLogger() *slog.Logger 获取原始的slog.Logger

性能优化

该库在设计时特别注意了性能优化:

  • 使用 buffer pool 减少内存分配
  • 支持小对象优化
  • 异步日志记录支持
  • 高效的级别过滤
  • 原子操作保证线程安全

贡献

欢迎提交 Issue 和 Pull Request。

许可证

MIT License

Documentation

Index

Constants

View Source
const (
	TimeKey    = slog.TimeKey
	LevelKey   = slog.LevelKey
	MessageKey = slog.MessageKey
	SourceKey  = slog.SourceKey
)
View Source
const (
	Name    = "slog"
	Version = "v0.0.21"
)

Variables

View Source
var (
	TimeFormat = "2006/01/02 15:04.05.000" // 默认时间格式

)

Functions

func Debug

func Debug(msg string, args ...any)

Debug 记录全局Debug级别的日志。

func Debugf

func Debugf(format string, args ...any)

Debugf 记录格式化的全局Debug级别的日志。

func DisableDLPLogger added in v0.0.18

func DisableDLPLogger()

DisableDLPLogger 禁用日志脱敏功能

func DisableJsonLogger

func DisableJsonLogger()

DisableJsonLogger 禁用 JSON 日志记录器。

func DisableTextLogger

func DisableTextLogger()

DisableTextLogger 禁用文本日志记录器。

func EnableDLPLogger added in v0.0.18

func EnableDLPLogger()

EnableDLPLogger 启用日志脱敏功能

func EnableFormatters added in v0.0.16

func EnableFormatters(formatters ...formatter.Formatter)

EnableFormatters 启用日志格式化器。

func EnableJsonLogger

func EnableJsonLogger()

EnableJsonLogger 启用 JSON 日志记录器。

func EnableTextLogger

func EnableTextLogger()

EnableTextLogger 启用文本日志记录器。

func Error

func Error(msg string, args ...any)

Error 记录全局Error级别的日志。

func Errorf

func Errorf(format string, args ...any)

Errorf 记录格式化的全局Error级别的日志。

func Fatal added in v0.0.2

func Fatal(msg string, args ...any)

Fatal 记录全局Fatal级别的日志,并退出程序。

func Fatalf added in v0.0.2

func Fatalf(format string, args ...any)

Fatalf 记录格式化的全局Fatal级别的日志,并退出程序。

func GetChanRecord added in v0.0.15

func GetChanRecord(num ...uint16) chan slog.Record

GetChanRecord 使用通道获取日志信息

func GetSlogLogger added in v0.0.16

func GetSlogLogger() *slog.Logger

GetSlogLogger 返回原始log/slog的日志记录器

func Info

func Info(msg string, args ...any)

Info 记录全局Info级别的日志。

func Infof

func Infof(format string, args ...any)

Infof 记录格式化的全局Info级别的日志。

func IsDLPEnabled added in v0.0.18

func IsDLPEnabled() bool

IsDLPEnabled 检查DLP是否启用

func New added in v0.0.2

func New(handler Handler) *slog.Logger

func NewConsoleHandler added in v0.0.2

func NewConsoleHandler(w io.Writer, noColor bool, opts *slog.HandlerOptions) slog.Handler

NewConsoleHandler returns a log/slog.Handler using the receiver's options. Default options are used if opts is nil.

func NewJSONHandler added in v0.0.2

func NewJSONHandler(w io.Writer, opts *HandlerOptions) *slog.JSONHandler

func NewOptions added in v0.0.2

func NewOptions(options *slog.HandlerOptions) *slog.HandlerOptions

NewOptions 创建新的处理程序选项。

func NewTextHandler added in v0.0.2

func NewTextHandler(w io.Writer, opts *HandlerOptions) *slog.TextHandler

func NewWriter added in v0.0.19

func NewWriter(filename ...string) *writer

NewWriter 创建一个新的日志写入器,支持指定一个或多个文件路径,多个路径时使用第一个有效路径 filename: 日志文件路径 默认配置:

  • 单个文件最大 100MB
  • 保留最近 30 天的日志
  • 最多保留 30 个备份文件
  • 使用本地时间
  • 不压缩旧文件

func Printf

func Printf(format string, args ...any)

Printf 记录信息级别的格式化日志。

func Println

func Println(msg string, args ...any)

Println 记录信息级别的日志。

func SetLevelDebug

func SetLevelDebug()

SetLevelDebug 设置全局日志级别为Debug。

func SetLevelError

func SetLevelError()

SetLevelError 设置全局日志级别为Error。

func SetLevelFatal

func SetLevelFatal()

SetLevelFatal 设置全局日志级别为Fatal。

func SetLevelInfo

func SetLevelInfo()

SetLevelInfo 设置全局日志级别为Info。

func SetLevelTrace

func SetLevelTrace()

SetLevelTrace 设置全局日志级别为Trace。

func SetLevelWarn

func SetLevelWarn()

SetLevelWarn 设置全局日志级别为Warn。

func Trace

func Trace(msg string, args ...any)

Trace 记录全局Trace级别的日志。

func Tracef

func Tracef(format string, args ...any)

Tracef 记录格式化的全局Trace级别的日志。

func Warn

func Warn(msg string, args ...any)

Warn 记录全局Warn级别的日志。

func Warnf

func Warnf(format string, args ...any)

Warnf 记录格式化的全局Warn级别的日志。

Types

type Attr

type Attr = slog.Attr

func Any

func Any(key string, v any) Attr

func Bool

func Bool(key string, v bool) Attr

func Duration

func Duration(key string, v time.Duration) Attr

func Float64

func Float64(key string, v float64) Attr

func Group

func Group(key string, args ...any) Attr

func Int

func Int(key string, v int) Attr

func Int64

func Int64(key string, v int64) Attr

func String

func String(key string, v string) Attr

func Time

func Time(key string, v time.Time) Attr

func Uint64

func Uint64(key string, v uint64) Attr

type Fields added in v0.0.18

type Fields struct {
	// contains filtered or unexported fields
}

Fields 存储上下文字段

type Handler added in v0.0.15

type Handler = slog.Handler

type HandlerOptions added in v0.0.2

type HandlerOptions = slog.HandlerOptions

type Level added in v0.0.2

type Level = slog.Level
const (
	LevelTrace Level = -8 // 跟踪级别,最详细的日志记录
	LevelDebug Level = -4 // 调试级别,用于开发调试
	LevelInfo  Level = 0  // 信息级别,普通日志信息
	LevelWarn  Level = 4  // 警告级别,潜在的问题
	LevelError Level = 8  // 错误级别,需要注意的错误
	LevelFatal Level = 12 // 致命级别,会导致程序退出的错误
)

func GetLevel added in v0.0.11

func GetLevel() Level

GetLevel 获取全局日志级别。

type Logger

type Logger struct {
	// contains filtered or unexported fields
}

Logger 结构体定义,实现日志记录功能

func Default

func Default(modules ...string) *Logger

Default 返回一个新的带前缀的日志记录器

func NewLogger added in v0.0.15

func NewLogger(w io.Writer, noColor, addSource bool) *Logger

NewLogger 创建一个包含文本和JSON格式的日志记录器

func With added in v0.0.11

func With(args ...any) *Logger

With 创建一个新的日志记录器,带有指定的属性。

func WithContext added in v0.0.3

func WithContext(ctx context.Context) *Logger

WithContext 方法保持不变

func WithGroup added in v0.0.11

func WithGroup(name string) *Logger

WithGroup 创建一个带有指定组名的全局日志记录器 这是一个包级别的便捷方法 参数:

  • name: 日志组的名称

返回:

  • 带有指定组名的新日志记录器实例

func WithValue

func WithValue(key string, val any) *Logger

WithValue 在全局上下文中添加键值对并返回新的 Logger

func (*Logger) Debug

func (l *Logger) Debug(msg string, args ...any)

Debug 记录Debug级别的日志。

func (*Logger) Debugf

func (l *Logger) Debugf(format string, args ...any)

Debugf 记录格式化的调试级别日志

func (*Logger) Error

func (l *Logger) Error(msg string, args ...any)

Error 记录错误级别的日志

func (*Logger) Errorf

func (l *Logger) Errorf(format string, args ...any)

Errorf 记录格式化的错误级别日志

func (*Logger) Fatal added in v0.0.2

func (l *Logger) Fatal(msg string, args ...any)

Fatal 记录致命错误并终止程序

func (*Logger) Fatalf added in v0.0.2

func (l *Logger) Fatalf(format string, args ...any)

Fatalf 记录格式化的致命错误并终止程序

func (*Logger) GetLevel added in v0.0.9

func (l *Logger) GetLevel() Level

GetLevel 获取当前日志级别 优先返回原子存储的级别,否则返回有效级别

func (*Logger) GetSlogLogger added in v0.0.16

func (l *Logger) GetSlogLogger() *slog.Logger

GetSlogLogger 方法

func (*Logger) Info

func (l *Logger) Info(msg string, args ...any)

Info 记录信息级别的日志

func (*Logger) Infof

func (l *Logger) Infof(format string, args ...any)

Infof 记录格式化的信息级别日志

func (*Logger) Printf added in v0.0.2

func (l *Logger) Printf(format string, args ...any)

Printf 兼容标准库的格式化日志方法

func (*Logger) Println added in v0.0.2

func (l *Logger) Println(msg string, args ...any)

Println 兼容标准库的普通日志方法

func (*Logger) SetLevel added in v0.0.15

func (l *Logger) SetLevel(level Level) *Logger

SetLevel 设置日志级别 同时更新普通存储和原子存储

func (*Logger) Trace added in v0.0.6

func (l *Logger) Trace(msg string, args ...any)

Trace 记录跟踪级别的日志

func (*Logger) Tracef added in v0.0.6

func (l *Logger) Tracef(format string, args ...any)

Tracef 记录格式化的跟踪级别日志

func (*Logger) Warn

func (l *Logger) Warn(msg string, args ...any)

Warn 记录警告级别的日志

func (*Logger) Warnf

func (l *Logger) Warnf(format string, args ...any)

Warnf 记录格式化的警告级别日志

func (*Logger) With

func (l *Logger) With(args ...any) *Logger

With 创建一个带有额外字段的新日志记录器

func (*Logger) WithContext added in v0.0.7

func (l *Logger) WithContext(ctx context.Context) *Logger

WithContext 使用给定的上下文

func (*Logger) WithGroup

func (l *Logger) WithGroup(name string) *Logger

WithGroup 在当前日志记录器基础上创建一个新的日志组 参数:

  • name: 日志组的名称

返回:

  • 带有指定组名的新日志记录器实例

func (*Logger) WithValue added in v0.0.2

func (l *Logger) WithValue(key string, val any) *Logger

WithValue 在上下文中存储一个键值对,并返回新的上下文

type Record added in v0.0.8

type Record = slog.Record

type Value added in v0.0.2

type Value = slog.Value

func GroupValue added in v0.0.16

func GroupValue(args ...Attr) Value

func StringValue added in v0.0.2

func StringValue(value string) Value

Directories

Path Synopsis
dlp

Jump to

Keyboard shortcuts

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