slog

package module
v0.1.3 Latest Latest
Warning

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

Go to latest
Published: Dec 16, 2025 License: MIT Imports: 26 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 格式
  • 支持彩色日志输出
  • 支持动态调整日志级别
  • 支持日志分组和模块化
  • 支持结构化字段记录
  • 追加 logfmt/GELF 输出,便于直连 Loki/Graylog/Vector
  • 内置运行时开关面板和 CLI 开关,随时调整级别/输出/DLP
  • 线程安全设计
🔒 数据脱敏 (DLP)
  • 插拔式脱敏器架构: 支持动态加载和配置脱敏器
  • 智能类型检测: 自动识别手机号、邮箱、身份证、银行卡等敏感信息
  • 高性能缓存: xxhash64 纯 Go 实现生成缓存键,低碰撞且无外部依赖
  • 结构体脱敏: 支持通过标签自动脱敏结构体字段
  • 自定义脱敏规则: 支持正则表达式和自定义脱敏函数
  • 精确脱敏处理: 优化脱敏算法,正确隐藏身份证生日信息,避免误判普通文本
⚡ 性能优化
  • 分级对象池: 小中大三级 Buffer 池提升内存效率
  • LRU 缓存策略: 替换全清除策略,减少内存压力
  • xxhash 缓存键: xxhash64 生成缓存键,低碰撞且保持高吞吐
  • 高性能缓冲设计: 优化内存分配和回收
🎨 用户界面
  • 内置丰富的可视化进度条功能: 支持多种样式和动画效果
  • 建造者模式 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。
  • 也可以使用链式构建器快速生成 Logger:
logger := slog.NewLoggerBuilder().
    WithModule("order").
    WithGroup("api").
    WithAttrs(slog.String("req_id", "r-1")).
    EnableJSON(false).
    Build()
logger.InfoContext(ctx, "created", slog.String("user", "alice"))

⚠️ 注意:EnableJSONLoggerEnableTextLoggerEnableDLPLogger 等全局开关会立即影响所有选择“继承”模式的记录器。在多租户或多模块进程中,优先为每个 Logger 设置显式的 SetEnableText/SetEnableJSON 等配置,避免因为其他协程切换全局状态而导致输出格式突变。需要临时调整全局配置时,请结合明确的作用域(例如只在调试阶段打开,并确保退出前恢复),并避免跨 goroutine 共享并写入同一个配置实例。

日志级别控制
// 设置全局日志级别
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:    "[email protected]",
    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": "[email protected]",
    },
    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 脱敏用户名部分 [email protected] → u**[email protected]
银行卡号 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
  • 线程安全: 所有操作都是并发安全的

⚠️ 提示:进度条与动态动画会在标准输出上产生多行或回退字符,适合 TTY 或纯文本日志。当同时启用 JSON、Webhook、Syslog 等结构化输出时,请将这类效果定向到单独的 io.Writer,或在该 logger 上禁用 JSON 输出,避免破坏上游解析。

进度条选项说明:

选项 类型 默认值 描述
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")

提示:若模块配置来自 JSON/YAML 等动态来源,可直接调用 modules.Config.Bind 将弱类型 map[string]any 映射为强类型结构体,避免在 Configure 中散布显式断言:

var opts struct {
    Endpoint   string        `json:"endpoint"`
    Recipients []string      `json:"recipients"`
    Timeout    time.Duration `json:"timeout"`
}

if err := config.Bind(&opts); err != nil {
    return err
}

Bind 基于标准库 encoding/json 实现,天然兼容字符串形式的 time.Duration 等常见类型,并在配置缺失时返回零值,让模块装配更加稳定、优雅。

7.4 内置模块详解
Formatter 模块
  • 功能概览: 通过 FormatFormatByTypeFormatByKind 等组合函数为 slog 属性链提供二次格式化,兼容嵌套 slog.Group
  • 关键实现: 时间格式化器会在传入的 location 为空时自动降级为 time.UTCUnixTimestampFormatter 仅接受纳秒、微秒、毫秒与秒四档精度,超出范围会直接 panic,部署前务必由配置层校验。
  • 边界处理: PIIFormatter 会递归遍历所有子属性并保留 id*_id-id 字段原值,长度不超过 5 的字符串会完全遮挡;HTTPRequestFormatter / HTTPResponseFormatterignoreHeaderstrue 时统一返回 [hidden],避免意外泄露头部信息。
  • 配置提示: 当前适配器使用 replacement 字段承载目标字段名,等价于调用 PIIFormatter("user");如需自定义掩码字符,可直接将 formatter 函数组合后通过 EnableFormatters 注入。
  • 快速示例:
// 通过模块工厂启用时间与 PII 脱敏
logger := slog.
    UseFactory("formatter", modules.Config{"type": "time", "format": time.RFC3339}).
    UseFactory("formatter", modules.Config{"type": "pii", "replacement": "user"}).
    Build()

logger.Info("profile update", "user", map[string]any{
    "id": "42", "email": "[email protected]",
})
Multi 模块
  • 功能概览: 提供 FanoutFailoverRouterRecoverHandlerError 等模式,将多个 slog.Handler 组合为一条链路。
  • 关键实现: Fanout 在分发前调用 record.Clone(),避免下游修改互相干扰;Failover 顺序尝试 handler,首个成功后立即终止并返回 nil,全部失败时回传最后一个错误。
  • 边界处理: 内部的 try 方法会捕获 panic 并转换成错误,因此不会打断主链路;RoutableHandler 复制分组信息并在 WithAttrs 时重新打平属性,防止跨组丢字段;WithGroup 遵循 slog 规范,对空字符串直接返回当前实例,避免无意义层级。
  • 扩展建议: 需要更多策略时,可复用 MultiAdapter.AddHandler 追加自定义 handler,再结合 RecoverHandlerError 注册统一的告警回调。
  • 快速示例:
multiAdapter := multi.NewMultiAdapter()
multiAdapter.AddHandler(slog.NewJSONHandler(os.Stdout, nil))
multiAdapter.AddHandler(slog.NewTextHandler(os.Stderr, nil))

logger := slog.UseModule(multiAdapter).Build()
logger.Info("同步输出到多个目标", "trace_id", "abc123")
Webhook 模块
  • 功能概览: 将日志异步转换为 JSON 并通过 HTTP POST 发送到外部服务。
  • 关键实现: Option.Timeout 默认 10 秒,send 会通过 context.WithTimeout 控制请求生命周期;DefaultConverter 会展开 error*http.Requestuser 字段,并将剩余属性放入 extra
  • 边界处理: Handle 在 goroutine 中调用 send,错误会被静默丢弃,必须通过外部监控或自定义 Converter 注入补偿逻辑;适配器仅在成功拨号 Endpoint 时才创建 handler,因此需在部署前验证网络连通性。
  • 使用提示: 若需要复用已有 http.Client 或启用连接池,可参考 send 实现自定义版本,并通过 Option.MarshalerOption.Converter 托管。
  • 快速示例:
logger := slog.
    UseFactory("webhook", modules.Config{
        "endpoint": "https://hooks.example.com/logs",
        "timeout":  "15s",
        "level":    "warn",
    }).
    Build()
logger.Warn("订单异常", "order_id", 12345)
Syslog 模块
  • 功能概览: 生成符合 @cee JSON 格式的 payload 并写入远端 syslog。
  • 关键实现: NewSyslogHandlerOption.Level 为空时自动降级到 slog.LevelDebug,并在处理时将上下文属性与记录属性统一转为 map;写入操作在 goroutine 中执行,避免阻塞主线程。
  • 边界处理: 异步写入意味着 Writer 的错误会被忽略;使用适配器时若 networkaddr 配置为空则不会创建 handler,需要在配置阶段提前检查。
  • 使用提示: 推荐在退出阶段手动关闭 SyslogAdapter 持有的 net.Conn,或替换为具备自动重连能力的 Writer,实现更稳定的持久连接。
  • 快速示例:
conn, err := net.Dial("udp", "127.0.0.1:514")
if err != nil {
    log.Fatalf("连接 syslog 失败: %v", err)
}

handler := syslog.NewSyslogHandler(conn, &syslog.Option{
    Writer: conn,
    Level:  slog.LevelInfo,
})

logger := slog.NewLogger(handler, false, false)
logger.Info("service started", "pid", os.Getpid())
Formatter/Handler 组合实践
  • 时间戳与时区: 同时启用 TimeFormatterTimezoneConverter 时需保证调用顺序,先转换时区再输出字符串。
  • 隐私合规: 将 PIIFormatter 与 DLP 模块串联时,可先在 formatter 阶段做结构化裁剪,再交由 DLP 模式识别,降低误杀概率。
7.5 插件管理器与注册中心
  • 线程安全: PluginManager 通过 sync.RWMutexatomic.Bool 管理注册表与启用状态,EnableAll / DisableAll 会逐一更新快照,适合热插拔场景。
  • 统计信息: GetStats 返回深拷贝,包含总数、各类型数量以及每个插件的启用状态与优先级,方便制作仪表盘。
  • 配置读取: BasePlugin.Configure 会复制传入 map,避免调用方后续写入导致状态串联;读取时请使用 GetConfig 单独提取。
  • 模块注册中心: Registry.Register 会校验重名模块并按优先级排序,BaseModule 默认启用且直接存储配置引用,如需并发修改请在外部复制配置。
  • 工厂模式: 通过 modules.RegisterFactory 注册的工厂支持延迟实例化,可结合 Config.Bind 自动映射强类型配置结构体。
7.6 边界场景提示
  • 配置校验: UnixTimestampFormatter 对非法精度会 panic,建议在加载配置阶段提前校验;Webhook 缺少 endpoint 时 handler 不会发送任何请求。
  • 异步写入: Webhook 与 Syslog 均在 goroutine 内发送日志,无返回值反馈;关键告警可搭配 multi.Failover 或自定义重试逻辑,避免静默失败。
  • 资源释放: Multi 模块不会自动关闭下游资源,组合 Syslog / Webhook 等长连接时需在应用退出阶段手动调用 Close
  • 上下文属性: Webhook 与 Syslog 可通过 Option.AttrFromContext 注入额外属性,回调必须幂等且快速,避免放大写入延迟。
  • 命名一致性: 目前 formatter 适配器将 replacement 字段作为目标键名使用,既有配置需保持一致;计划后续重构可统一迁移到 key 字段。

运行时控制与诊断

动态 Formatter 管理

借助 slog.RegisterFormatter/RemoveFormatter/ListFormatters 可以在不停机的情况下插入、移除或巡检格式化函数:

id := slog.RegisterFormatter("mask-email", func(groups []string, attr slog.Attr) (slog.Value, bool) {
    if attr.Key == "email" {
        return slog.StringValue("***@example.com"), true
    }
    return attr.Value, false
})

fmt.Println("当前 formatter:", slog.ListFormatters())
slog.RemoveFormatter(id)

配合 slog.EnableDiagnosticsLogging(true, io.Writer) 可实时输出 formatter / DLP 的修改前后值,便于观察链路;未显式指定写入目标时默认写入 stderr

模块热更新与路由
  • slog.UpdateModuleConfig("webhook", modules.Config{"endpoint": "https://api"}):重新加载已注册模块配置。
  • slog.RegisteredModules():查看当前生效的模块列表。
  • slog.SetRecordRouter(func(r slog.Record) []string { ... }):按日志内容筛选需要触发的模块(例如只让 Error 级别进入 Webhook 或 Syslog)。
  • logger.Diagnostics() / slog.CollectModuleDiagnostics():汇总每个模块的健康状态与自定义指标,实现面板化监控。
记录限流与上下文传播
  • slog.ConfigureRecordLimiter(rate, burst) 为所有 logger 加上令牌桶限流,防止突发日志压垮下游;被限流的记录会提示到 stderr
  • slog.SetContextPropagator(func(ctx context.Context) []slog.Attr { ... }) 可将自定义 trace id、tenant id 等从 context.Context 自动投递到日志属性,所有 handler(包含模块)都会看到同样字段。

示例:

diags := logger.Diagnostics()
for _, d := range diags {
    fmt.Printf("module=%s priority=%d healthy=%v metrics=%v\n", d.Name, d.Priority, d.Healthy, d.Metrics)
}

结合上述 API,即可在生产环境实现“低干扰”的热调整:模块可在不重启的前提下更新配置、临时上/下线 formatter,必要时启用限流或定位 DLP、Webhook 的具体行为。

运行时开关面板 / CLI
  • slog.GetRuntimeSnapshot():查看当前级别、Text/JSON/DLP 状态与 DLP 版本号
  • slog.ApplyRuntimeOption("level", "warn") / ApplyRuntimeOption("json", "on"):代码内快速切换
  • slog.StartRuntimePanel(":9090"):启动 HTTP 面板(GET/POST /slog/runtime,支持 level/text/json/dlp 字段)

示例:

slog.StartRuntimePanel(":9090")             // 生产环境建议加鉴权/网关
curl -XPOST "http://localhost:9090/slog/runtime" -d "level=info&text=on&json=off&dlp=on"
日志订阅机制
// 订阅日志记录
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)
        }
    }
}()

订阅特性:

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

⚠️ 注意:Subscribe 返回的 channel 仍然是固定容量的缓冲队列;如果消费端处理速度跟不上,缓冲写满后主日志路径会被阻塞。高吞吐场景下建议:

  • 根据业务峰值调大缓冲区容量;
  • 为订阅者准备独立的消费 goroutine,并妥善处理错误;
  • 在需要完全异步的场景中,自行实现带丢弃策略的桥接或使用队列系统。

日志文件管理

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) 功能

完整的脱敏类型、结构体标签、批量处理与自定义策略示例已在前文的 日志脱敏(DLP) 章节详细介绍。此处作为方法索引保留标题,避免重复内容,建议直接跳转查看该章节以获取最新的指导。

性能优化

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

🚀 核心性能特性
  • 分级对象池: 小中大三级 Buffer 池,提升 95%+内存复用率
  • xxhash 缓存: xxhash64 缓存键,低碰撞且避免外部依赖
  • LRU 缓存策略: 智能内存管理,替换全清除策略
  • 原子操作: 保证线程安全的同时最小化锁竞争
📊 性能基准
  • 进度条渲染: 从 30.4ms/op 优化到<1ms/op (3000%+提升)
  • DLP 缓存路径: BenchmarkDesensitizer_WithCache ~46.6ns/op;无缓存路径 ~2.79µs/op(AMD EPYC 9K65,Go 1.23,go test -bench=.
  • 缓存键生成: BenchmarkCacheKeyOptimizer_LongData ~314ns/op(xxhash64 )
  • 并发性能: 支持高并发场景下的线性性能扩展

贡献

欢迎提交 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.3"
)

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 ConfigureRecordLimiter added in v0.1.2

func ConfigureRecordLimiter(ratePerSecond, burst int)

ConfigureRecordLimiter 设置全局日志速率限制(ratePerSecond<=0 关闭限制)。

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 DebugContext added in v0.1.3

func DebugContext(ctx context.Context, msg string, args ...any)

DebugContext 记录全局 Debug 日志并传播上下文。

func Debugf

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

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

func DebugfContext added in v0.1.3

func DebugfContext(ctx context.Context, format string, args ...any)

DebugfContext 记录格式化 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 EnableDiagnosticsLogging added in v0.1.2

func EnableDiagnosticsLogging(on bool, writer ...io.Writer)

EnableDiagnosticsLogging 控制扩展管线的调试输出,可选自定义输出目标。

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 ErrorContext added in v0.1.3

func ErrorContext(ctx context.Context, msg string, args ...any)

ErrorContext 记录全局 Error 日志并传播上下文。

func Errorf

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

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

func ErrorfContext added in v0.1.3

func ErrorfContext(ctx context.Context, format string, args ...any)

ErrorfContext 记录格式化 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 InfoContext added in v0.1.3

func InfoContext(ctx context.Context, msg string, args ...any)

InfoContext 记录全局 Info 日志并传播上下文。

func Infof

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

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

func InfofContext added in v0.1.3

func InfofContext(ctx context.Context, format string, args ...any)

InfofContext 记录格式化 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 ListFormatters added in v0.1.2

func ListFormatters() []string

ListFormatters 返回当前激活的格式化器名称列表。

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 RegisterFormatter added in v0.1.2

func RegisterFormatter(name string, fn FormatterFunc) string

RegisterFormatter 在运行时注册新的格式化函数,返回可用于移除的 ID。

func RegisteredModules added in v0.1.2

func RegisteredModules() []string

RegisteredModules 返回当前已注册的模块名称。

func RemoveFormatter added in v0.1.2

func RemoveFormatter(id string) bool

RemoveFormatter 根据 ID 移除先前注册的格式化函数。

func SetAttrFormatterOrder added in v0.1.2

func SetAttrFormatterOrder(order ...AttrFormatterRule)

SetAttrFormatterOrder 允许自定义内置属性格式化规则顺序,传入空列表时会恢复默认顺序。

func SetContextPropagator added in v0.1.2

func SetContextPropagator(fn ContextPropagatorFunc)

SetContextPropagator 设置全局上下文传播方法。

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 SetRecordRouter added in v0.1.2

func SetRecordRouter(router RecordRouter)

SetRecordRouter 自定义模块路由策略(返回模块名称列表)。

func SetTimeFormat added in v0.1.0

func SetTimeFormat(format string)

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

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

func StartRuntimePanel added in v0.1.3

func StartRuntimePanel(addr string) (*http.Server, error)

StartRuntimePanel 启动一个简易 HTTP 面板,暴露运行时开关。 GET /slog/runtime -> 返回状态 POST /slog/runtime -> 通过 query/form 字段 level/text/json/dlp 调整开关

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 TraceContext added in v0.1.3

func TraceContext(ctx context.Context, msg string, args ...any)

TraceContext 记录全局 Trace 日志并传播上下文。

func Tracef

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

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

func TracefContext added in v0.1.3

func TracefContext(ctx context.Context, format string, args ...any)

TracefContext 记录格式化 Trace 日志并传播上下文。

func UpdateModuleConfig added in v0.1.2

func UpdateModuleConfig(name string, config modules.Config) error

UpdateModuleConfig 热更新已注册模块的配置

func Warn

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

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

func WarnContext added in v0.1.3

func WarnContext(ctx context.Context, msg string, args ...any)

WarnContext 记录全局 Warn 日志并传播上下文。

func Warnf

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

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

func WarnfContext added in v0.1.3

func WarnfContext(ctx context.Context, format string, args ...any)

WarnfContext 记录格式化 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 AttrFormatterRule added in v0.1.2

type AttrFormatterRule int
const (
	AttrFormatterRuleSource AttrFormatterRule = iota
	AttrFormatterRuleLevel
	AttrFormatterRuleTime
)

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 ContextPropagatorFunc added in v0.1.2

type ContextPropagatorFunc func(ctx context.Context) []slog.Attr

ContextPropagatorFunc 将自定义上下文信息转换成 slog.Attr。

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 NewGELFLogger added in v0.1.3

func NewGELFLogger(w io.Writer, opts *slog.HandlerOptions, gopts *gelfmod.Options) *Logger

NewGELFLogger 使用 GELF handler 创建 Logger,面向 Graylog/Logstash。

func NewLogfmtLogger added in v0.1.3

func NewLogfmtLogger(w io.Writer, opts *slog.HandlerOptions) *Logger

NewLogfmtLogger 使用 logfmt handler 创建 Logger,便于直接接入 Loki/Vector。

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) DebugfContext added in v0.1.3

func (l *Logger) DebugfContext(ctx context.Context, format string, args ...any)

DebugfContext 记录格式化调试日志,附带上下文传播。

func (*Logger) Diagnostics added in v0.1.2

func (l *Logger) Diagnostics() []ModuleDiagnostics

Diagnostics 返回模块健康与指标快照。

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) Error

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

Error 记录错误级别的日志

func (*Logger) ErrorContext added in v0.1.3

func (l *Logger) ErrorContext(ctx context.Context, msg string, args ...any)

ErrorContext 记录错误级别日志,附带上下文传播。

func (*Logger) Errorf

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

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

func (*Logger) ErrorfContext added in v0.1.3

func (l *Logger) ErrorfContext(ctx context.Context, format string, args ...any)

ErrorfContext 记录格式化的错误日志,附带上下文传播。

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) FatalContext added in v0.1.3

func (l *Logger) FatalContext(ctx context.Context, msg string, args ...any)

FatalContext 记录致命日志并退出,附带上下文传播。

func (*Logger) Fatalf added in v0.0.2

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

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

func (*Logger) FatalfContext added in v0.1.3

func (l *Logger) FatalfContext(ctx context.Context, format string, args ...any)

FatalfContext 记录格式化致命日志并退出,附带上下文传播。

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) InfoContext added in v0.1.3

func (l *Logger) InfoContext(ctx context.Context, msg string, args ...any)

InfoContext 记录信息级别日志,附带上下文传播。

func (*Logger) Infof

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

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

func (*Logger) InfofContext added in v0.1.3

func (l *Logger) InfofContext(ctx context.Context, format string, args ...any)

InfofContext 记录格式化的信息日志,附带上下文传播。

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) TraceContext added in v0.1.3

func (l *Logger) TraceContext(ctx context.Context, msg string, args ...any)

TraceContext 记录跟踪日志,附带上下文传播。

func (*Logger) Tracef added in v0.0.6

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

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

func (*Logger) TracefContext added in v0.1.3

func (l *Logger) TracefContext(ctx context.Context, format string, args ...any)

TracefContext 记录格式化的 Trace 日志,附带上下文传播。

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) WarnContext added in v0.1.3

func (l *Logger) WarnContext(ctx context.Context, msg string, args ...any)

WarnContext 记录警告级别日志,附带上下文传播。

func (*Logger) Warnf

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

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

func (*Logger) WarnfContext added in v0.1.3

func (l *Logger) WarnfContext(ctx context.Context, format string, args ...any)

WarnfContext 记录格式化的警告日志,附带上下文传播。

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 LoggerBuilder added in v0.1.3

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

LoggerBuilder 通过链式方式快速构建 Logger,便于上层按需开启 Text/JSON/DLP、预置分组与字段。

func NewLoggerBuilder added in v0.1.3

func NewLoggerBuilder() *LoggerBuilder

NewLoggerBuilder 创建一个新的构建器,默认输出到 stdout、启用文本日志。

func (*LoggerBuilder) Build added in v0.1.3

func (b *LoggerBuilder) Build() *Logger

Build 构建 Logger 实例。

func (*LoggerBuilder) EnableDLP added in v0.1.3

func (b *LoggerBuilder) EnableDLP(on bool) *LoggerBuilder

EnableDLP 控制 DLP 脱敏能力。

func (*LoggerBuilder) EnableJSON added in v0.1.3

func (b *LoggerBuilder) EnableJSON(on bool) *LoggerBuilder

EnableJSON 控制 JSON 输出。

func (*LoggerBuilder) EnableText added in v0.1.3

func (b *LoggerBuilder) EnableText(on bool) *LoggerBuilder

EnableText 控制文本输出。

func (*LoggerBuilder) UseGELF added in v0.1.3

func (b *LoggerBuilder) UseGELF(opts *gelfmod.Options) *LoggerBuilder

UseGELF 切换为 GELF 输出,并可附带选项。

func (*LoggerBuilder) UseLogfmt added in v0.1.3

func (b *LoggerBuilder) UseLogfmt() *LoggerBuilder

UseLogfmt 切换为 logfmt 输出。

func (*LoggerBuilder) WithAttrs added in v0.1.3

func (b *LoggerBuilder) WithAttrs(attrs ...Attr) *LoggerBuilder

WithAttrs 预置结构化字段。

func (*LoggerBuilder) WithConfig added in v0.1.3

func (b *LoggerBuilder) WithConfig(cfg *Config) *LoggerBuilder

WithConfig 使用自定义配置,内部会复制一份避免外部修改产生副作用。

func (*LoggerBuilder) WithGroup added in v0.1.3

func (b *LoggerBuilder) WithGroup(name string) *LoggerBuilder

WithGroup 预置日志分组。

func (*LoggerBuilder) WithModule added in v0.1.3

func (b *LoggerBuilder) WithModule(name string) *LoggerBuilder

WithModule 为日志添加模块字段。

func (*LoggerBuilder) WithWriter added in v0.1.3

func (b *LoggerBuilder) WithWriter(w io.Writer) *LoggerBuilder

WithWriter 指定输出目标。

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 ModuleDiagnostics added in v0.1.2

type ModuleDiagnostics struct {
	Name     string             `json:"name"`
	Type     modules.ModuleType `json:"type"`
	Enabled  bool               `json:"enabled"`
	Healthy  *bool              `json:"healthy,omitempty"`
	Metrics  map[string]any     `json:"metrics,omitempty"`
	Priority int                `json:"priority"`
}

ModuleDiagnostics 描述模块健康与指标信息。

func CollectModuleDiagnostics added in v0.1.2

func CollectModuleDiagnostics() []ModuleDiagnostics

CollectModuleDiagnostics 聚合已注册模块的健康状态与指标。

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 RecordRouter added in v0.1.2

type RecordRouter func(record slog.Record) []string

type RuntimeSnapshot added in v0.1.3

type RuntimeSnapshot struct {
	Level       Level  `json:"level"`
	TextEnabled bool   `json:"text_enabled"`
	JSONEnabled bool   `json:"json_enabled"`
	DLPEnabled  bool   `json:"dlp_enabled"`
	DLPVersion  int64  `json:"dlp_version"`
	Message     string `json:"message,omitempty"`
}

RuntimeSnapshot 描述当前运行时开关状态,便于面板/CLI 展示。

func ApplyRuntimeOption added in v0.1.3

func ApplyRuntimeOption(option, value string) (RuntimeSnapshot, error)

ApplyRuntimeOption 通过字符串选项调整全局开关,返回更新后的状态。

func GetRuntimeSnapshot added in v0.1.3

func GetRuntimeSnapshot() RuntimeSnapshot

GetRuntimeSnapshot 返回当前运行时状态快照。

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
internal

Jump to

Keyboard shortcuts

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