slog

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Sep 29, 2025 License: MIT Imports: 22 Imported by: 7

README

slog

PkgGoDev Go Report Card MIT License

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

目录

特性

🚀 核心功能
  • 支持多种日志级别(Trace、Debug、Info、Warn、Error、Fatal)
  • 支持同时输出文本和 JSON 格式
  • 支持彩色日志输出
  • 支持动态调整日志级别
  • 支持日志分组和模块化
  • 支持结构化字段记录
  • 线程安全设计
🔒 数据脱敏 (DLP)
  • 插拔式脱敏器架构: 支持动态加载和配置脱敏器
  • 智能类型检测: 自动识别手机号、邮箱、身份证、银行卡等敏感信息
  • 高性能缓存: 使用 xxhash 算法优化缓存键,性能提升74%
  • 结构体脱敏: 支持通过标签自动脱敏结构体字段
  • 自定义脱敏规则: 支持正则表达式和自定义脱敏函数
  • 精确脱敏处理: 优化脱敏算法,正确隐藏身份证生日信息,避免误判普通文本
⚡ 性能优化
  • 分级对象池: 小中大三级Buffer池提升内存效率
  • LRU缓存策略: 替换全清除策略,减少内存压力
  • xxhash缓存键: 减少哈希碰撞,缓存性能提升74%
  • 高性能缓冲设计: 优化内存分配和回收
🎨 用户界面
  • 内置丰富的可视化进度条功能: 支持多种样式和动画效果
  • 建造者模式API: 简化复杂配置,提供优雅的链式调用
  • 动态输出和实时更新: 支持实时进度显示和状态更新
🔧 架构设计
  • 模块化插件系统: 从工厂模式简化为插件管理器
  • 接口隔离原则: 按单一职责原则拆分接口
  • 结构化错误处理: 统一错误类型,提升调试体验
  • 全局状态管理: LoggerManager解决全局状态混乱问题

安装

依赖 Go 1.23 及以上版本。

go get github.com/darkit/slog

快速开始

package main

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

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

	// 获取原始的 slog.Logger
	slogLogger := logger.GetSlogLogger()
	// 现在可以直接使用原始的 slog.Logger
	slogLogger.Info("使用原始slog记录日志")

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

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

使用指南

创建 Logger 与配置继承
cfg := slog.DefaultConfig()

// 显式控制实例输出格式
cfg.SetEnableText(true)   // 强制开启文本输出
cfg.SetEnableJSON(false)  // 禁用 JSON 输出

// 也可以选择继承全局开关
cfg.InheritJSONOutput()   // JSON 输出跟随 EnableJSONLogger/DisableJSONLogger

logger := slog.NewLoggerWithConfig(os.Stdout, cfg)

// 全局开关仍然生效
slog.EnableJSONLogger()   // 立即影响所有继承 JSON 配置的实例
logger.Info("configurable logger")
  • DefaultConfig 返回可复用的配置对象;SetEnableText/SetEnableJSON 会显式锁定实例的输出格式。
  • 调用 InheritTextOutput/InheritJSONOutput 时,实例将重新遵循 EnableTextLoggerDisableTextLoggerEnableJSONLogger 等全局函数。
  • NewLogger 返回遵循全局配置的默认实例,NewLoggerWithConfig 允许在同一进程中创建互不影响的独立 logger。
日志级别控制
// 设置全局日志级别
slog.SetLevelDebug()  // Debug级别
slog.SetLevelInfo()   // Info级别
slog.SetLevelWarn()   // Warn级别
slog.SetLevelError()  // Error级别
slog.SetLevelFatal()  // Fatal级别
slog.SetLevelTrace()  // Trace级别

日志记录方法
// 不同级别的日志记录
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",
)
日志分组和模块
// 创建模块化日志记录器
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")
输出格式控制
// 启用/禁用文本日志
slog.EnableTextLogger()
slog.DisableTextLogger()

// 启用/禁用JSON日志
slog.EnableJSONLogger()
slog.DisableJSONLogger()

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

// 使用自定义配置继承/覆盖输出开关
cfg := slog.DefaultConfig()
cfg.InheritTextOutput() // 文本输出跟随全局开关
cfg.SetEnableJSON(true) // 显式开启 JSON 输出
logger = slog.NewLoggerWithConfig(os.Stdout, cfg)
logger.Info("格式控制示例", "user", "alice")
日志脱敏(DLP)

slog 提供了强大的数据泄露防护(DLP)功能,支持文本脱敏和结构体脱敏,自动识别和脱敏敏感信息。

5.1 基础脱敏功能
// 启用日志脱敏
slog.EnableDLPLogger()

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

// 使用脱敏日志
logger.Info("User data",
"credit_card", "1234-5678-9012-3456", // 将被自动脱敏
"phone", "13800138000",               // 将被自动脱敏
)
5.2 结构体脱敏

支持对结构体进行自动脱敏,通过 dlp 标签指定脱敏规则:

type User struct {
    ID       int64  `dlp:"id_card"`      // 身份证脱敏
    Name     string `dlp:"chinese_name"` // 中文姓名脱敏
    Phone    string `dlp:"mobile_phone"` // 手机号脱敏
    Email    string `dlp:"email"`        // 邮箱脱敏
    Password string `dlp:"password"`     // 密码脱敏
    Age      int    `dlp:"-"`            // 跳过此字段
    Address  string `dlp:"address"`      // 地址脱敏
}

// 使用结构体脱敏
user := &User{
    ID:       622421196903065015,
    Name:     "张三",
    Phone:    "13812345678",
    Email:    "zhangsan@example.com",
    Password: "password123",
    Age:      25,
}

// 基础脱敏(向后兼容)
dlpEngine := dlp.NewDlpEngine()
dlpEngine.Enable()
err := dlpEngine.DesensitizeStruct(user)

// 高级脱敏(推荐)
err = dlpEngine.DesensitizeStructAdvanced(user)

// 批量脱敏
users := []User{...}
err = dlpEngine.BatchDesensitizeStruct(&users)
5.3 嵌套结构体脱敏

支持递归处理嵌套结构体、切片、数组和映射:

type UserProfile struct {
    RealName string `dlp:"chinese_name"`
    Address  string `dlp:"address"`
}

type ComplexUser struct {
    BaseInfo UserProfile       `dlp:",recursive"`    // 递归处理嵌套结构体
    Friends  []User            `dlp:",recursive"`    // 递归处理切片
    Settings map[string]string `dlp:",recursive"`    // 递归处理映射
    BankCard string            `dlp:"bank_card"`     // 银行卡脱敏
}

complexUser := &ComplexUser{
    BaseInfo: UserProfile{
        RealName: "李四",
        Address:  "北京市朝阳区某某街道123号",
    },
    Friends: []User{
        {Name: "王五", Phone: "13555666777"},
        {Name: "赵六", Phone: "13444555666"},
    },
    Settings: map[string]string{
        "phone": "13812345678",
        "email": "user@example.com",
    },
    BankCard: "6222020000000000000",
}

err := dlpEngine.DesensitizeStructAdvanced(complexUser)
5.4 标签语法

支持灵活的标签配置:

type FlexibleUser struct {
    // 基础脱敏类型
    Name  string `dlp:"chinese_name"`  
    Phone string `dlp:"mobile_phone"`  
    
    // 递归处理嵌套数据
    Profile  UserProfile `dlp:",recursive"`
    Friends  []User      `dlp:",recursive"`
    Settings map[string]string `dlp:",recursive"`
    
    // 自定义脱敏策略
    Token    string `dlp:"custom:my_strategy"`
    
    // 跳过字段
    InternalID string `dlp:"-"`
    Age        int    `dlp:"-"`
    
    // 组合配置
    Data     string `dlp:"email,recursive"`
}

支持的标签选项:

  • type_name: 指定脱敏类型(如 chinese_name, mobile_phone 等)
  • recursive: 递归处理嵌套数据结构
  • custom:strategy_name: 使用自定义脱敏策略
  • -: 完全跳过此字段
5.5 自定义脱敏策略
// 注册自定义脱敏策略
dlpEngine.GetConfig().RegisterStrategy("my_token", func(s string) string {
    if len(s) <= 8 {
        return "***"
    }
    return s[:4] + "****" + s[len(s)-4:]
})

type CustomUser struct {
    Token    string `dlp:"custom:my_token"`
    APIKey   string `dlp:"custom:api_key"`
}

user := &CustomUser{
    Token:  "abcd1234efgh5678",
    APIKey: "sk-1234567890abcdef",
}

err := dlpEngine.DesensitizeStructAdvanced(user)
// Token: "abcd****5678", APIKey: "sk-1****cdef"
5.6 支持的脱敏类型
类型 标签名 描述 示例
中文姓名 chinese_name 保留姓氏,脱敏名字 张三 → 张*
身份证号 id_card 保留前6位和后4位,隐藏生日信息 110101199001010001 → 110101********0001
手机号码 mobile_phone 保留前3位和后4位 13812345678 → 138****5678
固定电话 landline 脱敏中间部分 010-12345678 → 010-****5678
电子邮箱 email 脱敏用户名部分 user@example.com → u**r@example.com
银行卡号 bank_card 保留前6位和后4位 6222020000000000000 → 622202*****0000
地址信息 address 脱敏详细地址 北京市朝阳区某某街道123号 → 北京市朝阳区某某街道***
密码 password 全部替换为星号 password123 → ***********
车牌号 plate 脱敏中间部分 京A12345 → 京A***45
IPv4地址 ipv4 脱敏中间段 192.168.1.100 → 192.***.1.100
IPv6地址 ipv6 脱敏中间段 2001:db8::1 → 2001:***::1
JWT令牌 jwt 脱敏payload部分 eyJ...abc → eyJ****.abc
URL地址 url 脱敏敏感参数 http://example.com?token=abchttp://example.com?token=***
5.7 批量处理和性能优化
// 批量处理大量数据
users := make([]User, 1000)
for i := 0; i < 1000; i++ {
    users[i] = User{
        Name:  "用户" + strconv.Itoa(i),
        Phone: "13812345678",
        Email: "user" + strconv.Itoa(i) + "@example.com",
    }
}

// 高效批量脱敏
err := dlpEngine.BatchDesensitizeStruct(&users)
if err != nil {
    log.Printf("批量脱敏失败: %v", err)
}
5.8 安全特性
  • 递归深度限制: 防止无限递归,最大深度为10层
  • 错误隔离: 单个字段脱敏失败不影响其他字段
  • 空值处理: 正确处理 nil 指针和空值
  • 并发安全: 所有操作都是线程安全的
  • 向后兼容: 保持与原有API的完全兼容性
进度条功能

slog 提供了丰富的进度条功能,用于在日志中显示可视化的进度:

// 基本进度条 - 根据时间自动推进
logger.ProgressBar("处理文件中", 5000, 30) // 消息, 总时间(ms), 进度条宽度

// 自定义进度值的进度条
logger.ProgressBarWithValue("处理进度", 75.5, 30) // 显示75.5%的进度

// 输出到特定writer的进度条
file, _ := os.Create("progress.log")
logger.ProgressBarTo("导出数据", 3000, 30, file)

// 带自定义值输出到特定writer
logger.ProgressBarWithValueTo("处理进度", 50.0, 30, os.Stdout)

// 使用自定义选项
opts := slog.DefaultProgressBarOptions()
opts.BarStyle = "block" // 使用方块样式 (可选: "default", "block", "simple")
opts.ShowPercentage = true
opts.TimeFormat = "15:04:05" // 自定义时间格式

// 带选项的进度条
logger.ProgressBarWithOptions("导入数据", 10000, 40, opts)

// 带选项和自定义值的进度条
logger.ProgressBarWithValueAndOptions("分析完成度", 80.0, 40, opts)

// 带选项和自定义值并输出到特定writer的进度条
logger.ProgressBarWithValueAndOptionsTo("处理状态", 65.5, 40, opts, os.Stdout)

进度条特性:

  • 多种样式: 支持默认(=)、方块(█)、简单(#-)等多种风格
  • 百分比显示: 可选择是否显示百分比
  • 自定义颜色: 继承日志级别颜色
  • 可自定义宽度: 适应不同终端大小
  • 实时更新: 根据时间自动更新或手动设置进度值
  • 自定义输出: 可以输出到任意writer
  • 线程安全: 所有操作都是并发安全的

进度条选项说明:

选项 类型 默认值 描述
BarStyle string "default" 进度条样式 ("default", "block", "simple")
ShowPercentage bool true 是否显示百分比
TimeFormat string TimeFormat 时间格式
LeftBracket string "[" 左边框字符
RightBracket string "]" 右边框字符
Fill string "=" 已完成部分填充字符
Head string ">" 进度条头部字符
Empty string " " 未完成部分填充字符
模块注册系统

slog 提供了强大的模块注册系统,支持插件化的日志处理组件,让您可以轻松扩展和定制日志功能。

7.1 模块类型

系统支持四种模块类型:

模块类型 说明 优先级 示例
Formatter 格式化器 - 对日志内容进行格式化处理 最高 时间格式化、脱敏处理
Middleware 中间件 - 日志处理中间层 过滤器、增强器
Handler 处理器 - 自定义日志处理逻辑 自定义输出逻辑
Sink 接收器 - 日志输出目标 Webhook、Syslog
7.2 快速使用内置模块
import "github.com/darkit/slog/modules"

// 方式1: 通过工厂函数快速创建
logger := slog.UseFactory("formatter", modules.Config{
    "type":   "time",
    "format": "2006-01-02 15:04:05",
}).Build()

// 方式2: 链式调用多个模块
logger = slog.UseFactory("formatter", modules.Config{
    "type": "time",
}).UseFactory("webhook", modules.Config{
    "endpoint": "https://api.example.com/webhook",
    "timeout":  "30s",
    "level":    "warn",
}).Build()

logger.Info("Hello World!")
7.3 配置驱动方式
// 通过配置文件驱动模块创建
configs := []modules.ModuleConfig{
    {
        Type:     "formatter",
        Name:     "time-formatter",
        Enabled:  true,
        Priority: 10,
        Config: modules.Config{
            "type":   "time",
            "format": "2006-01-02 15:04:05",
        },
    },
    {
        Type:     "webhook",
        Name:     "alert-webhook", 
        Enabled:  true,
        Priority: 100,
        Config: modules.Config{
            "endpoint": "https://alerts.example.com/webhook",
            "timeout":  "10s",
            "level":    "error",
        },
    },
}

logger := slog.UseConfig(configs).Build()
logger.Error("系统错误", "error", "database connection failed")
7.4 内置模块说明

Formatter 模块

// 时间格式化器
slog.UseFactory("formatter", modules.Config{
    "type":   "time", 
    "format": "2006-01-02 15:04:05",
})

// 错误信息脱敏
slog.UseFactory("formatter", modules.Config{
    "type":        "error",
    "replacement": "[ERROR]",
})

// PII信息脱敏  
slog.UseFactory("formatter", modules.Config{
    "type":        "pii",
    "replacement": "*****",
})

Webhook 模块

slog.UseFactory("webhook", modules.Config{
    "endpoint": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
    "timeout":  "30s",
    "level":    "warn", // 只发送 warn 及以上级别的日志
})

Syslog 模块

slog.UseFactory("syslog", modules.Config{
    "network": "udp",
    "addr":    "localhost:514", 
    "level":   "info",
})
7.5 自定义模块开发

创建自定义模块需要实现 modules.Module 接口:

import "github.com/darkit/slog/modules"

// 自定义邮件通知模块
type EmailModule struct {
    *modules.BaseModule
    smtpServer string
    recipients []string
}

func NewEmailModule() *EmailModule {
    return &EmailModule{
        BaseModule: modules.NewBaseModule("email", modules.TypeSink, 150),
    }
}

func (e *EmailModule) Configure(config modules.Config) error {
    if err := e.BaseModule.Configure(config); err != nil {
        return err
    }
    
    if server, ok := config["smtp_server"].(string); ok {
        e.smtpServer = server
    }
    
    if recipients, ok := config["recipients"].([]string); ok {
        e.recipients = recipients
    }
    
    // 创建自定义处理器
    e.SetHandler(e.createEmailHandler())
    return nil
}

func (e *EmailModule) createEmailHandler() slog.Handler {
    // 实现邮件发送处理器逻辑
    // ...
}

// 注册模块工厂
func init() {
    modules.RegisterFactory("email", func(config modules.Config) (modules.Module, error) {
        module := NewEmailModule()
        return module, module.Configure(config)
    })
}
7.6 模块管理
// 获取全局注册中心
registry := modules.GetRegistry()

// 查看已注册的模块
moduleList := registry.List()
for _, module := range moduleList {
    fmt.Printf("模块: %s, 类型: %s, 优先级: %d\n", 
        module.Name(), module.Type(), module.Priority())
}

// 获取特定模块
if module, exists := modules.GetModule("webhook"); exists {
    fmt.Printf("找到模块: %s\n", module.Name())
}

// 按类型获取模块
formatters := registry.GetByType(modules.TypeFormatter)
for _, formatter := range formatters {
    fmt.Printf("格式化器: %s\n", formatter.Name())
}
7.7 模块特性

优先级控制

  • 数字越小优先级越高
  • 相同类型的模块按优先级排序执行
  • 建议优先级范围:Formatter(1-50), Middleware(51-100), Handler(101-150), Sink(151-200)

配置热更新

// 动态更新模块配置
if module, exists := modules.GetModule("webhook"); exists {
    newConfig := modules.Config{
        "endpoint": "https://new-webhook-url.com",
        "timeout":  "60s",
    }
    module.Configure(newConfig)
}

模块生命周期

  1. 注册阶段:模块工厂注册到全局注册中心
  2. 创建阶段:通过工厂函数创建模块实例
  3. 配置阶段:使用配置参数初始化模块
  4. 构建阶段:将模块集成到处理器链中
  5. 运行阶段:模块参与日志处理流程
  6. 销毁阶段:模块清理和资源释放
日志订阅机制
// 订阅日志记录
ch, cancel := slog.Subscribe(1000) // 指定缓冲大小
defer cancel() // 确保取消订阅

// 处理订阅的日志
go func() {
    for record := range ch {
        fmt.Printf("收到日志: %s [%s] %s\n",
            record.Time.Format(slog.TimeFormat),
            record.Level,
            record.Message,
        )
    }
}()

// 多订阅者模式
ch1, cancel1 := slog.Subscribe(500)
defer cancel1()

ch2, cancel2 := slog.Subscribe(1000)
defer cancel2()

// 不同订阅者可以独立处理日志
go func() {
    for record := range ch1 {
        // 处理所有日志
        fmt.Printf("订阅者1: %v\n", record)
    }
}()

go func() {
    for record := range ch2 {
        // 只处理错误日志
        if record.Level >= slog.LevelError {
            fmt.Printf("订阅者2 - 错误: %v\n", record)
        }
    }
}()

订阅特性:

  • 支持多个订阅者
  • 独立的缓冲区大小控制
  • 自动资源清理
  • 无阻塞设计
  • 支持选择性处理

日志文件管理

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)
EnableTextLogger() 启用文本日志输出
DisableTextLogger() 禁用文本日志输出
EnableJSONLogger() 启用JSON日志输出
DisableJSONLogger() 禁用JSON日志输出
EnableFormatters(formatters ...formatter.Formatter) 启用日志格式化器
EnableDLPLogger() 启用日志脱敏功能
DisableDLPLogger() 禁用日志脱敏功能
Subscribe(size uint16) (<-chan slog.Record, func()) 订阅日志记录,返回只读channel和取消函数
ProgressBar(msg string, durationMs int, barWidth int, level ...Level) *Logger 显示带有可视化进度条的日志
ProgressBarWithValue(msg string, progress float64, barWidth int, level ...Level) 显示指定进度值的进度条
ProgressBarWithValueTo(msg string, progress float64, barWidth int, writer io.Writer, level ...Level) 显示指定进度值的进度条并输出到指定writer
ProgressBarWithOptions(msg string, durationMs int, barWidth int, opts progressBarOptions, level ...Level) *Logger 显示可高度定制的进度条
ProgressBarWithOptionsTo(msg string, durationMs int, barWidth int, opts progressBarOptions, writer io.Writer, level ...Level) *Logger 显示可高度定制的进度条并输出到指定writer
ProgressBarWithValueAndOptions(msg string, progress float64, barWidth int, opts progressBarOptions, level ...Level) 显示指定进度值的定制进度条
ProgressBarWithValueAndOptionsTo(msg string, progress float64, barWidth int, opts progressBarOptions, writer io.Writer, level ...Level) 显示指定进度值的定制进度条并输出到指定writer
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
ProgressBar(msg string, durationMs int, barWidth int, level ...Level) *Logger 显示带有可视化进度条的日志
ProgressBarWithValue(msg string, progress float64, barWidth int, level ...Level) 显示指定进度值的进度条
ProgressBarWithValueTo(msg string, progress float64, barWidth int, writer io.Writer, level ...Level) 显示指定进度值的进度条并输出到指定writer
ProgressBarWithOptions(msg string, durationMs int, barWidth int, opts progressBarOptions, level ...Level) *Logger 显示可高度定制的进度条
ProgressBarWithOptionsTo(msg string, durationMs int, barWidth int, opts progressBarOptions, writer io.Writer, level ...Level) *Logger 显示可高度定制的进度条并输出到指定writer
ProgressBarWithValueAndOptions(msg string, progress float64, barWidth int, opts progressBarOptions, level ...Level) 显示指定进度值的定制进度条
ProgressBarWithValueAndOptionsTo(msg string, progress float64, barWidth int, opts progressBarOptions, writer io.Writer, level ...Level) 显示指定进度值的定制进度条并输出到指定writer
Dynamic(msg string, frames int, interval int, writer ...io.Writer) 动态输出带点号动画效果
Progress(msg string, durationMs int, writer ...io.Writer) 显示进度百分比
Countdown(msg string, seconds int, writer ...io.Writer) 显示倒计时
Loading(msg string, seconds int, writer ...io.Writer) 显示加载动画

数据脱敏 (DLP) 功能

slog 提供了强大的数据脱敏功能,支持自动识别和脱敏敏感信息:

支持的脱敏类型
类型 示例输入 脱敏输出 描述
手机号 13812345678 138****5678 中国手机号格式
邮箱 user@example.com us***@example.com 保留前2位和域名
身份证 110101199001010001 110101********0001 保留前6位和后4位,隐藏生日
银行卡 6227123456781234 6227****1234 保留前4位和后4位
IPv4 192.168.1.1 192.*.*.1 保留首尾段
IPv6 2001:db8::1 2001:db8:****:1 保留前缀和后缀
JWT eyJ0... eyJ0.****.[signature] 保留header和signature
使用方式
import "github.com/darkit/slog"

// 启用DLP功能
slog.EnableDLPLogger()

// 自动脱敏
logger := slog.Default()
logger.Info("用户登录", "phone", "13812345678", "email", "user@example.com")
// 输出: 用户登录 phone=138****5678 email=us***@example.com
结构体脱敏

支持通过标签自动脱敏结构体字段:

type User struct {
    Name  string `dlp:"chinese_name"`
    Phone string `dlp:"mobile"`
    Email string `dlp:"email"`
    IDCard string `dlp:"id_card"`
}

user := User{
    Name:   "张三",
    Phone:  "13812345678", 
    Email:  "zhangsan@example.com",
    IDCard: "123456789012345678",
}

logger.Info("用户信息", "user", user)
// 自动脱敏所有标记字段
自定义脱敏器
import "github.com/darkit/slog/dlp"

// 创建自定义脱敏器
manager := dlp.NewDefaultDesensitizerManager()
phoneDesensitizer := dlp.NewPhoneDesensitizer()
manager.RegisterDesensitizer(phoneDesensitizer)

// 处理敏感数据
result, err := manager.ProcessWithType("phone", "13812345678")
if err == nil {
    fmt.Println(result.Result) // 138****5678
}

性能优化

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

🚀 核心性能特性
  • 分级对象池: 小中大三级Buffer池,提升95%+内存复用率
  • xxhash缓存: 缓存键生成性能提升74%,零哈希碰撞
  • LRU缓存策略: 智能内存管理,替换全清除策略
  • 原子操作: 保证线程安全的同时最小化锁竞争
📊 性能基准
  • 进度条渲染: 从30.4ms/op优化到<1ms/op (3000%+提升)
  • DLP缓存: 从573.3ns/op优化到149.2ns/op (74%提升)
  • 内存分配: 分级池系统减少90%+内存分配
  • 并发性能: 支持高并发场景下的线性性能扩展

贡献

欢迎提交 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    = "darkit/slog"
	Version = "v0.1.0"
)

Variables

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

)

Functions

func ApplyModulesToHandler added in v0.1.0

func ApplyModulesToHandler(baseHandler slog.Handler, moduleList []modules.Module) slog.Handler

ApplyModulesToHandler 将模块处理器应用到基础处理器上

func ConfigureGlobal added in v0.1.0

func ConfigureGlobal(config *GlobalConfig) error

ConfigureGlobal 配置全局设置(向后兼容)

func Countdown added in v0.0.23

func Countdown(msg string, seconds int)

Countdown 全局倒计时显示

  • msg: 要显示的消息内容
  • seconds: 倒计时的秒数

func Debug

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

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

func Debugf

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

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

func DefaultProgressBarOptions added in v0.1.0

func DefaultProgressBarOptions() progressBarOptions

DefaultProgressBarOptions 返回默认的进度条选项

func DisableDLPLogger added in v0.0.18

func DisableDLPLogger()

DisableDLPLogger 禁用日志脱敏功能

func DisableJSONLogger added in v0.1.0

func DisableJSONLogger()

DisableJSONLogger 禁用 JSON 日志记录器。

func DisableTextLogger

func DisableTextLogger()

DisableTextLogger 禁用文本日志记录器。

func Dynamic added in v0.0.23

func Dynamic(msg string, frames int, interval int)

Dynamic 动态输出带点号动画效果

  • msg: 要显示的消息内容
  • frames: 动画更新的总帧数
  • interval: 每次更新的时间间隔(毫秒)

func EnableDLPLogger added in v0.0.18

func EnableDLPLogger()

EnableDLPLogger 启用日志脱敏功能

func EnableJSONLogger added in v0.1.0

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 GetErrorComponent added in v0.1.0

func GetErrorComponent(err error) string

GetErrorComponent 获取错误组件名称

func GetErrorOperation added in v0.1.0

func GetErrorOperation(err error) string

GetErrorOperation 获取错误操作名称

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 IsErrorType added in v0.1.0

func IsErrorType(err error, errorType ErrorType) bool

IsErrorType 检查错误是否为指定类型

func Loading added in v0.0.23

func Loading(msg string, seconds int)

Loading 全局加载动画

  • msg: 要显示的消息内容
  • seconds: 动画持续的秒数

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 Progress added in v0.0.23

func Progress(msg string, durationMs int)

Progress 全局进度显示

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)

func ProgressBarWithValue added in v0.1.0

func ProgressBarWithValue(msg string, progress float64, barWidth int, level ...Level)

ProgressBarWithValue 全局方法:显示指定进度值的进度条

  • msg: 要显示的消息内容
  • progress: 进度值(0-100之间)
  • barWidth: 进度条的总宽度(字符数)
  • level: 可选的日志级别,默认使用全局默认级别

func ProgressBarWithValueAndOptions added in v0.1.0

func ProgressBarWithValueAndOptions(msg string, progress float64, barWidth int, opts progressBarOptions, level ...Level)

ProgressBarWithValueAndOptions 全局方法:显示指定进度值的定制进度条

  • msg: 要显示的消息内容
  • progress: 进度值(0-100之间)
  • barWidth: 进度条的总宽度(字符数)
  • opts: 进度条选项,控制显示样式
  • level: 可选的日志级别,默认使用全局默认级别

func ProgressBarWithValueAndOptionsTo added in v0.1.0

func ProgressBarWithValueAndOptionsTo(msg string, progress float64, barWidth int, opts progressBarOptions, writer io.Writer, level ...Level)

ProgressBarWithValueAndOptionsTo 全局方法:显示指定进度值的定制进度条并输出到指定writer

  • msg: 要显示的消息内容
  • progress: 进度值(0-100之间)
  • barWidth: 进度条的总宽度(字符数)
  • opts: 进度条选项,控制显示样式
  • writer: 指定的输出writer
  • level: 可选的日志级别,默认使用全局默认级别

func ProgressBarWithValueTo added in v0.1.0

func ProgressBarWithValueTo(msg string, progress float64, barWidth int, writer io.Writer, level ...Level)

ProgressBarWithValueTo 全局方法:显示指定进度值的进度条并输出到指定writer

  • msg: 要显示的消息内容
  • progress: 进度值(0-100之间)
  • barWidth: 进度条的总宽度(字符数)
  • writer: 指定的输出writer
  • level: 可选的日志级别,默认使用全局默认级别

func SetLevel added in v0.0.23

func SetLevel(level any) error

SetLevel 动态更新日志级别 level 可以是数字(-8, -4, 0, 4, 8, 12)或字符串(trace, debug, info, warn, error, fatal)

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 SetTimeFormat added in v0.1.0

func SetTimeFormat(format string)

SetTimeFormat 全局方法:设置日志时间格式

  • format: 时间格式字符串,例如 "2006-01-02 15:04:05.000"

func Subscribe added in v0.0.23

func Subscribe(size uint16) (<-chan slog.Record, context.CancelFunc)

Subscribe 订阅日志记录 创建一个新的日志订阅,返回接收日志记录的通道和取消订阅的函数

参数:

  • size: 通道缓冲区大小,决定可以在不阻塞的情况下缓存多少日志记录

返回值:

  • <-chan slog.Record: 只读的日志记录通道,用于接收日志
  • context.CancelFunc: 取消订阅的函数,调用后会停止接收日志并清理资源

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 ChainHandler added in v0.1.0

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

ChainHandler 链式处理器

func NewChainHandler added in v0.1.0

func NewChainHandler(middleware, next slog.Handler) *ChainHandler

func (*ChainHandler) Enabled added in v0.1.0

func (h *ChainHandler) Enabled(ctx context.Context, level slog.Level) bool

func (*ChainHandler) Handle added in v0.1.0

func (h *ChainHandler) Handle(ctx context.Context, r slog.Record) error

func (*ChainHandler) WithAttrs added in v0.1.0

func (h *ChainHandler) WithAttrs(attrs []slog.Attr) slog.Handler

func (*ChainHandler) WithGroup added in v0.1.0

func (h *ChainHandler) WithGroup(name string) slog.Handler

type Config added in v0.1.0

type Config struct {
	// 缓存配置
	MaxFormatCacheSize int64 // 最大格式缓存大小

	// 性能配置
	StringBuilderPoolSize int // 字符串构建器池大小

	// 错误处理配置
	LogInternalErrors bool // 是否记录内部错误

	// 输出配置
	EnableText *bool // 启用文本输出(nil 表示继承全局设置)
	EnableJSON *bool // 启用JSON输出(nil 表示继承全局设置)
	NoColor    bool  // 禁用颜色
	AddSource  bool  // 添加源代码位置

	// 时间配置
	TimeFormat string // 时间格式
}

Config 日志配置结构体

func DefaultConfig added in v0.1.0

func DefaultConfig() *Config

DefaultConfig 返回默认配置

func (*Config) InheritJSONOutput added in v0.1.0

func (c *Config) InheritJSONOutput()

InheritJSONOutput 使实例 JSON 输出沿用全局设置

func (*Config) InheritTextOutput added in v0.1.0

func (c *Config) InheritTextOutput()

InheritTextOutput 使实例文本输出沿用全局设置

func (*Config) SetEnableJSON added in v0.1.0

func (c *Config) SetEnableJSON(enabled bool)

SetEnableJSON 显式设置 JSON 输出开关

func (*Config) SetEnableText added in v0.1.0

func (c *Config) SetEnableText(enabled bool)

SetEnableText 显式设置文本输出开关

type DynamicProgressRenderer added in v0.1.0

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

DynamicProgressRenderer 高性能动态进度条渲染器 解决30.4ms/op性能瓶颈,目标<1ms/op

func GetDynamicProgressRenderer added in v0.1.0

func GetDynamicProgressRenderer() *DynamicProgressRenderer

GetDynamicProgressRenderer 获取全局渲染器实例

func (*DynamicProgressRenderer) GetActiveCount added in v0.1.0

func (dpr *DynamicProgressRenderer) GetActiveCount() int

GetActiveCount 获取活跃渲染数量

func (*DynamicProgressRenderer) GetDynamicStats added in v0.1.0

func (dpr *DynamicProgressRenderer) GetDynamicStats() DynamicStats

GetDynamicStats 获取动态进度条统计信息

func (*DynamicProgressRenderer) StartDynamic added in v0.1.0

func (dpr *DynamicProgressRenderer) StartDynamic(
	logger *Logger,
	msg string,
	frames int,
	interval time.Duration,
	writer io.Writer,
) error

StartDynamic 启动高性能动态进度条 异步执行,不阻塞主线程,支持预计算和缓存

func (*DynamicProgressRenderer) StopAll added in v0.1.0

func (dpr *DynamicProgressRenderer) StopAll()

StopAll 停止所有活跃的动态进度条

func (*DynamicProgressRenderer) StopByLogger added in v0.1.0

func (dpr *DynamicProgressRenderer) StopByLogger(logger *Logger)

StopByLogger 停止指定logger的动态进度条

type DynamicStats added in v0.1.0

type DynamicStats struct {
	ActiveCount   int
	TotalStarted  int64
	TotalFinished int64
	PoolSize      int
}

DynamicStats 动态进度条统计信息

type ErrorType added in v0.1.0

type ErrorType int

ErrorType 错误类型枚举

const (
	ErrorTypeInvalidInput ErrorType = iota
	ErrorTypeProcessing
	ErrorTypeConfiguration
	ErrorTypeInitialization
	ErrorTypeInternal
)

func (ErrorType) String added in v0.1.0

func (et ErrorType) String() string

String 返回错误类型的字符串表示

type FanoutHandler added in v0.1.0

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

FanoutHandler 扇出处理器

func NewFanoutHandler added in v0.1.0

func NewFanoutHandler(handlers ...slog.Handler) *FanoutHandler

func (*FanoutHandler) Enabled added in v0.1.0

func (h *FanoutHandler) Enabled(ctx context.Context, level slog.Level) bool

func (*FanoutHandler) Handle added in v0.1.0

func (h *FanoutHandler) Handle(ctx context.Context, r slog.Record) error

func (*FanoutHandler) WithAttrs added in v0.1.0

func (h *FanoutHandler) WithAttrs(attrs []slog.Attr) slog.Handler

func (*FanoutHandler) WithGroup added in v0.1.0

func (h *FanoutHandler) WithGroup(name string) slog.Handler

type Fields added in v0.0.18

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

Fields 存储上下文字段

type FormatterFunc added in v0.1.0

type FormatterFunc func(groups []string, attr slog.Attr) (slog.Value, bool)

FormatterFunc 内部格式化器接口,避免直接依赖formatter包

type GlobalConfig added in v0.1.0

type GlobalConfig struct {
	DefaultWriter  io.Writer
	DefaultLevel   Level
	DefaultNoColor bool
	DefaultSource  bool
	EnableText     bool
	EnableJSON     bool
}

GlobalConfig 全局配置,与实例配置分离

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 GetGlobalLogger added in v0.1.0

func GetGlobalLogger() *Logger

GetGlobalLogger 返回全局logger实例 如果全局logger未初始化,则创建一个默认的

func Named added in v0.1.0

func Named(name string) *Logger

Named 获取命名logger实例(向后兼容)

func NewLogger added in v0.0.15

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

NewLogger 创建一个包含文本和JSON格式的日志记录器 现在使用LoggerManager来管理实例,确保更好的状态隔离

func NewLoggerWithConfig added in v0.1.0

func NewLoggerWithConfig(w io.Writer, config *Config) *Logger

NewLoggerWithConfig 使用配置创建新的日志记录器

func ProgressBar added in v0.1.0

func ProgressBar(msg string, durationMs int, barWidth int, level ...Level) *Logger

ProgressBar 全局方法:显示带有可视化进度条的日志

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • barWidth: 进度条的总宽度(字符数)
  • level: 可选的日志级别,默认使用全局默认级别

func ProgressBarTo added in v0.1.0

func ProgressBarTo(msg string, durationMs int, barWidth int, writer io.Writer, level ...Level) *Logger

ProgressBarTo 全局方法:显示带有可视化进度条的日志,并输出到指定writer

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • barWidth: 进度条的总宽度(字符数)
  • writer: 指定的输出writer
  • level: 可选的日志级别,默认使用全局默认级别

func ProgressBarWithOptions added in v0.1.0

func ProgressBarWithOptions(msg string, durationMs int, barWidth int, opts progressBarOptions, level ...Level) *Logger

ProgressBarWithOptions 全局方法:显示可高度定制的进度条

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • barWidth: 进度条的总宽度(字符数)
  • opts: 进度条选项,控制显示样式
  • level: 可选的日志级别,默认使用全局默认级别

func ProgressBarWithOptionsTo added in v0.1.0

func ProgressBarWithOptionsTo(msg string, durationMs int, barWidth int, opts progressBarOptions, writer io.Writer, level ...Level) *Logger

ProgressBarWithOptionsTo 全局方法:显示可高度定制的进度条并输出到指定writer

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • barWidth: 进度条的总宽度(字符数)
  • opts: 进度条选项,控制显示样式
  • writer: 指定的输出writer
  • level: 可选的日志级别,默认使用全局默认级别

func ResetGlobalLogger added in v0.1.0

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

ResetGlobalLogger 重置全局logger实例 这在某些情况下很有用,比如需要更改全局logger的输出目标

func With added in v0.0.11

func With(args ...any) *Logger

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

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) Countdown added in v0.0.23

func (l *Logger) Countdown(msg string, seconds int, writer ...io.Writer)

Countdown 显示倒计时

  • msg: 要显示的消息内容
  • seconds: 倒计时的秒数
  • writer: 可选的输出writer,如果为nil则使用默认的l.w

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) Dynamic added in v0.0.23

func (l *Logger) Dynamic(msg string, frames int, interval int, writer ...io.Writer)

Dynamic 动态输出带点号动画效果

  • msg: 要显示的消息内容
  • frames: 动画更新的总帧数
  • interval: 每次更新的时间间隔(毫秒)
  • writer: 可选的输出writer,如果为nil则使用默认的l.w

func (*Logger) DynamicOptimized added in v0.1.0

func (l *Logger) DynamicOptimized(msg string, frames int, interval int, writer ...io.Writer)

DynamicOptimized 高性能的动态进度条方法 性能目标:从30.4ms/op优化到<1ms/op

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) FastDynamic added in v0.1.0

func (l *Logger) FastDynamic(msg string, durationMs int, writer ...io.Writer)

FastDynamic 提供快速动态进度条的便捷方法

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) Loading added in v0.0.23

func (l *Logger) Loading(msg string, seconds int, writer ...io.Writer)

Loading 显示加载动画

  • msg: 要显示的消息内容
  • seconds: 持续时间(秒)
  • writer: 可选的输出writer,如果为nil则使用默认的l.w

func (*Logger) NewProgressBar added in v0.1.0

func (l *Logger) NewProgressBar(message string) *ProgressBuilder

NewProgressBar 创建进度条建造者 这是新API的入口点,替换了原来的8个方法

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) Progress added in v0.0.23

func (l *Logger) Progress(msg string, durationMs int, writer ...io.Writer)

Progress 显示进度百分比

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • writer: 可选的输出writer,如果为nil则使用默认的l.w

func (*Logger) ProgressBar added in v0.1.0

func (l *Logger) ProgressBar(msg string, durationMs int, barWidth int, level ...Level) *Logger

ProgressBar 显示带有可视化进度条的日志

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • barWidth: 进度条的总宽度(字符数)
  • level: 可选的日志级别,默认使用logger的默认级别

func (*Logger) ProgressBarCompat added in v0.1.0

func (l *Logger) ProgressBarCompat(msg string, durationMs int, barWidth int, level ...Level) *Logger

ProgressBarCompat 向后兼容的进度条方法 @Deprecated: 使用 NewProgressBar().Duration().Width().Start() 替代

func (*Logger) ProgressBarTo added in v0.1.0

func (l *Logger) ProgressBarTo(msg string, durationMs int, barWidth int, writer io.Writer, level ...Level) *Logger

ProgressBarTo 显示带有可视化进度条的日志,并可指定输出目标

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • barWidth: 进度条的总宽度(字符数)
  • writer: 指定的输出writer
  • level: 可选的日志级别,默认使用logger的默认级别

func (*Logger) ProgressBarToCompat added in v0.1.0

func (l *Logger) ProgressBarToCompat(msg string, durationMs int, barWidth int, writer io.Writer, level ...Level) *Logger

ProgressBarToCompat 向后兼容的带输出目标进度条方法 @Deprecated: 使用 NewProgressBar().Duration().Width().To().Start() 替代

func (*Logger) ProgressBarWithOptions added in v0.1.0

func (l *Logger) ProgressBarWithOptions(msg string, durationMs int, barWidth int, opts progressBarOptions, level ...Level) *Logger

ProgressBarWithOptions 显示可高度定制的进度条

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • barWidth: 进度条的总宽度(字符数)
  • opts: 进度条选项,控制显示样式
  • level: 可选的日志级别,默认使用logger的默认级别

func (*Logger) ProgressBarWithOptionsTo added in v0.1.0

func (l *Logger) ProgressBarWithOptionsTo(msg string, durationMs int, barWidth int, opts progressBarOptions, writer io.Writer, level ...Level) *Logger

ProgressBarWithOptionsTo 显示可高度定制的进度条并输出到指定writer

  • msg: 要显示的消息内容
  • durationMs: 从0%到100%的总持续时间(毫秒)
  • barWidth: 进度条的总宽度(字符数)
  • opts: 进度条选项,控制显示样式
  • writer: 指定的输出writer
  • level: 可选的日志级别,默认使用logger的默认级别

func (*Logger) ProgressBarWithValue added in v0.1.0

func (l *Logger) ProgressBarWithValue(msg string, progress float64, barWidth int, level ...Level)

ProgressBarWithValue 显示指定进度值的进度条

  • msg: 要显示的消息内容
  • progress: 进度值(0-100之间)
  • barWidth: 进度条的总宽度(字符数)
  • level: 可选的日志级别,默认使用logger的默认级别

func (*Logger) ProgressBarWithValueAndOptions added in v0.1.0

func (l *Logger) ProgressBarWithValueAndOptions(msg string, progress float64, barWidth int, opts progressBarOptions, level ...Level)

ProgressBarWithValueAndOptions 显示指定进度值的定制进度条

  • msg: 要显示的消息内容
  • progress: 进度值(0-100之间)
  • barWidth: 进度条的总宽度(字符数)
  • opts: 进度条选项,控制显示样式
  • level: 可选的日志级别,默认使用logger的默认级别

func (*Logger) ProgressBarWithValueAndOptionsTo added in v0.1.0

func (l *Logger) ProgressBarWithValueAndOptionsTo(msg string, progress float64, barWidth int, opts progressBarOptions, writer io.Writer, level ...Level)

ProgressBarWithValueAndOptionsTo 显示指定进度值的定制进度条并输出到指定writer

  • msg: 要显示的消息内容
  • progress: 进度值(0-100之间)
  • barWidth: 进度条的总宽度(字符数)
  • opts: 进度条选项,控制显示样式
  • writer: 指定的输出writer
  • level: 可选的日志级别,默认使用logger的默认级别

func (*Logger) ProgressBarWithValueCompat added in v0.1.0

func (l *Logger) ProgressBarWithValueCompat(msg string, progress float64, barWidth int, level ...Level)

ProgressBarWithValueCompat 向后兼容的带值进度条方法 @Deprecated: 使用 NewProgressBar().Value().Width().Start() 替代

func (*Logger) ProgressBarWithValueTo added in v0.1.0

func (l *Logger) ProgressBarWithValueTo(msg string, progress float64, barWidth int, writer io.Writer, level ...Level)

ProgressBarWithValueTo 显示指定进度值的进度条并输出到指定writer

  • msg: 要显示的消息内容
  • progress: 进度值(0-100之间)
  • barWidth: 进度条的总宽度(字符数)
  • writer: 指定的输出writer
  • level: 可选的日志级别,默认使用logger的默认级别

func (*Logger) SetLevel added in v0.0.15

func (l *Logger) SetLevel(level any) *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) Use added in v0.1.0

func (l *Logger) Use(module modules.Module) *ModuleBuilder

Use 为Logger添加模块实例

func (*Logger) UseConfig added in v0.1.0

func (l *Logger) UseConfig(configs []modules.ModuleConfig) *ModuleBuilder

UseConfig 为Logger添加批量配置模块

func (*Logger) UseFactory added in v0.1.0

func (l *Logger) UseFactory(name string, config modules.Config) *ModuleBuilder

UseFactory 为Logger添加通过工厂创建的模块

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 创建带有上下文的新Logger

func (*Logger) WithDeadline added in v0.0.23

func (l *Logger) WithDeadline(d time.Time) (*Logger, context.CancelFunc)

WithDeadline 创建带截止时间的Logger

func (*Logger) WithGroup

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

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

  • name: 日志组的名称

返回:

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

func (*Logger) WithModules added in v0.1.0

func (l *Logger) WithModules(modules ...modules.Module) *ModuleBuilder

WithModules 便捷方法:一次性添加多个模块

func (*Logger) WithTimeout added in v0.0.23

func (l *Logger) WithTimeout(timeout time.Duration) (*Logger, context.CancelFunc)

WithTimeout 创建带超时的Logger

func (*Logger) WithValue added in v0.0.2

func (l *Logger) WithValue(key string, val interface{}) *Logger

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

type LoggerManager added in v0.1.0

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

LoggerManager 全局日志管理器,负责管理所有logger实例 解决全局状态混乱问题,实现实例隔离

func GetManager added in v0.1.0

func GetManager() *LoggerManager

GetManager 获取全局管理器实例

func (*LoggerManager) Configure added in v0.1.0

func (lm *LoggerManager) Configure(config *GlobalConfig) error

Configure 配置全局设置 注意:此操作会影响后续创建的logger,但不会影响已存在的实例

func (*LoggerManager) GetDefault added in v0.1.0

func (lm *LoggerManager) GetDefault() *Logger

GetDefault 获取默认logger实例 线程安全,支持延迟初始化

func (*LoggerManager) GetNamed added in v0.1.0

func (lm *LoggerManager) GetNamed(name string) *Logger

GetNamed 获取或创建命名logger实例 支持实例隔离,每个名称对应独立的logger

func (*LoggerManager) GetStats added in v0.1.0

func (lm *LoggerManager) GetStats() ManagerStats

GetStats 获取管理器统计信息

func (*LoggerManager) ListInstances added in v0.1.0

func (lm *LoggerManager) ListInstances() []string

ListInstances 列出所有已创建的logger实例名称

func (*LoggerManager) Reset added in v0.1.0

func (lm *LoggerManager) Reset()

Reset 重置管理器状态 清除所有实例,在测试中很有用

func (*LoggerManager) Shutdown added in v0.1.0

func (lm *LoggerManager) Shutdown()

Shutdown 关闭管理器 清理所有资源,程序退出时调用

type ManagerStats added in v0.1.0

type ManagerStats struct {
	DefaultLoggerExists bool
	InstanceCount       int
	InstanceNames       []string
}

Stats 返回管理器统计信息

type ModuleBuilder added in v0.1.0

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

ModuleBuilder 模块构建器,与现有系统集成

func EnableFormatter added in v0.1.0

func EnableFormatter(formatterType string, options ...modules.Config) *ModuleBuilder

EnableFormatter 全局方法:启用格式化器模块

func EnableMulti added in v0.1.0

func EnableMulti(strategy string, options ...modules.Config) *ModuleBuilder

EnableMulti 全局方法:启用多处理器模块

func EnableSyslog added in v0.1.0

func EnableSyslog(network, addr string, options ...modules.Config) *ModuleBuilder

EnableSyslog 全局方法:启用Syslog模块

func EnableWebhook added in v0.1.0

func EnableWebhook(endpoint string, options ...modules.Config) *ModuleBuilder

EnableWebhook 全局方法:启用Webhook模块

func NewModuleBuilder added in v0.1.0

func NewModuleBuilder(logger *Logger) *ModuleBuilder

NewModuleBuilder 创建新的模块构建器

func UseConfig added in v0.1.0

func UseConfig(configs []modules.ModuleConfig) *ModuleBuilder

UseConfig 全局方法:使用配置批量创建模块

func UseFactory added in v0.1.0

func UseFactory(name string, config modules.Config) *ModuleBuilder

UseFactory 全局方法:通过工厂创建并使用模块

func UseModule added in v0.1.0

func UseModule(module modules.Module) *ModuleBuilder

UseModule 全局方法:使用模块实例

func (*ModuleBuilder) Build added in v0.1.0

func (mb *ModuleBuilder) Build() *Logger

Build 构建并应用所有模块

func (*ModuleBuilder) UseConfig added in v0.1.0

func (mb *ModuleBuilder) UseConfig(configs []modules.ModuleConfig) *ModuleBuilder

UseConfig 使用配置批量创建模块

func (*ModuleBuilder) UseFactory added in v0.1.0

func (mb *ModuleBuilder) UseFactory(name string, config modules.Config) *ModuleBuilder

UseFactory 通过工厂创建并使用模块

func (*ModuleBuilder) UseModule added in v0.1.0

func (mb *ModuleBuilder) UseModule(module modules.Module) *ModuleBuilder

UseModule 添加模块实例

type ProgressBuilder added in v0.1.0

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

ProgressBuilder 进度条建造者,使用链式调用构建进度条配置 这个设计比原来的8个不同方法更加优雅和易用

func (*ProgressBuilder) Brackets added in v0.1.0

func (pb *ProgressBuilder) Brackets(left, right string) *ProgressBuilder

Brackets 设置左右括号

func (*ProgressBuilder) CustomChars added in v0.1.0

func (pb *ProgressBuilder) CustomChars(filled, head, empty string) *ProgressBuilder

CustomChars 设置自定义填充字符 自动将样式设置为StyleCustom

func (*ProgressBuilder) Duration added in v0.1.0

func (pb *ProgressBuilder) Duration(d time.Duration) *ProgressBuilder

Duration 设置自动进度持续时间 仅在未设置手动进度值时有效

func (*ProgressBuilder) Level added in v0.1.0

func (pb *ProgressBuilder) Level(level Level) *ProgressBuilder

Level 设置日志级别

func (*ProgressBuilder) Milliseconds added in v0.1.0

func (pb *ProgressBuilder) Milliseconds(ms int) *ProgressBuilder

Milliseconds 设置自动进度持续时间(毫秒) 向后兼容方法

func (*ProgressBuilder) ShowPercent added in v0.1.0

func (pb *ProgressBuilder) ShowPercent(show bool) *ProgressBuilder

ShowPercent 设置是否显示百分比

func (*ProgressBuilder) Start added in v0.1.0

func (pb *ProgressBuilder) Start()

Start 开始显示进度条 这是终端方法,执行实际的进度条显示

func (*ProgressBuilder) Style added in v0.1.0

func (pb *ProgressBuilder) Style(style ProgressStyle) *ProgressBuilder

Style 设置进度条样式

func (*ProgressBuilder) TimeFormat added in v0.1.0

func (pb *ProgressBuilder) TimeFormat(format string) *ProgressBuilder

TimeFormat 设置时间格式

func (*ProgressBuilder) To added in v0.1.0

func (pb *ProgressBuilder) To(writer io.Writer) *ProgressBuilder

To 设置输出目标

func (*ProgressBuilder) Value added in v0.1.0

func (pb *ProgressBuilder) Value(progress float64) *ProgressBuilder

Value 设置手动进度值 (0.0 - 1.0) 设置后将使用手动进度模式,不会自动递增

func (*ProgressBuilder) Width added in v0.1.0

func (pb *ProgressBuilder) Width(w int) *ProgressBuilder

Width 设置进度条宽度

type ProgressStyle added in v0.1.0

type ProgressStyle int

ProgressStyle 进度条样式枚举

const (
	StyleDefault ProgressStyle = iota
	StyleArrows
	StyleDots
	StyleBlocks
	StyleCustom
)

func (ProgressStyle) String added in v0.1.0

func (ps ProgressStyle) String() string

String 返回样式的字符串表示

type Record added in v0.0.8

type Record = slog.Record

type SlogError added in v0.1.0

type SlogError struct {
	Type      ErrorType
	Component string
	Operation string
	Field     string
	Expected  string
	Actual    string
	Details   map[string]interface{}
	Cause     error
}

SlogError 结构化错误类型 提供更丰富的错误上下文信息,便于调试和错误处理

func NewConfigurationError added in v0.1.0

func NewConfigurationError(component, field string, cause error) *SlogError

NewConfigurationError 创建配置错误

func NewDLPError added in v0.1.0

func NewDLPError(operation, field string, cause error) *SlogError

NewDLPError 创建DLP相关错误

func NewFormatterError added in v0.1.0

func NewFormatterError(operation string, cause error) *SlogError

NewFormatterError 创建格式化器相关错误

func NewInitializationError added in v0.1.0

func NewInitializationError(component, operation string, cause error) *SlogError

NewInitializationError 创建初始化错误

func NewInternalError added in v0.1.0

func NewInternalError(component, operation string, cause error) *SlogError

NewInternalError 创建内部错误

func NewInvalidInputError added in v0.1.0

func NewInvalidInputError(field, expected, actual string) *SlogError

NewInvalidInputError 创建输入无效错误

func NewModuleError added in v0.1.0

func NewModuleError(moduleName, operation string, cause error) *SlogError

NewModuleError 创建模块相关错误

func NewProcessingError added in v0.1.0

func NewProcessingError(component, operation string, cause error) *SlogError

NewProcessingError 创建处理错误

func (*SlogError) Error added in v0.1.0

func (e *SlogError) Error() string

Error 实现error接口

func (*SlogError) GetDetails added in v0.1.0

func (e *SlogError) GetDetails() map[string]interface{}

GetDetails 获取详细信息

func (*SlogError) Unwrap added in v0.1.0

func (e *SlogError) Unwrap() error

Unwrap 实现errors.Unwrap接口,支持错误链

func (*SlogError) WithDetails added in v0.1.0

func (e *SlogError) WithDetails(key string, value interface{}) *SlogError

WithDetails 添加详细信息

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