slog

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Sep 8, 2026 License: MIT Imports: 30 Imported by: 0

README

slog

Go Reference Coverage Status Go Version zread

基于 Go 1.23+ 官方 log/slog 的生产级结构化日志库,支持 DLP 数据脱敏、Logger Lineage 模块隔离、动态配置、日志订阅与多种输出格式。

安装

go get github.com/feymanlee/slog@latest

要求 Go 1.23+

快速开始

package main

import (
    "context"

    "github.com/feymanlee/slog"
)

func main() {
    // 使用默认 Logger(文本彩色输出)
    logger := slog.Default()

    // 键值对结构化日志
    logger.Info("服务启动", "port", 8080, "env", "production")

    // 格式化日志
    logger.Infof("处理耗时 %d ms", 150)

    // 带上下文的日志(自动注入 trace_id 等)
    ctx := context.WithValue(context.Background(), "trace_id", "abc-123")
    logger.WithContext(ctx).Info("请求完成")
}

核心特性

特性 说明
六级别日志 Trace(-8)、Debug(-4)、Info(0)、Warn(4)、Error(8)、Fatal(12)
双格式输出 文本 + JSON 可同时启用,独立控制开关
彩色终端 自动检测 TTY,可关闭
DLP 数据脱敏 36 种敏感信息类型,可按需启用/禁用 matcher
模块化架构 Logger Lineage 隔离,支持 Formatter / Webhook / Syslog / GELF / Logfmt / Net / Multi 模块
高性能 分级对象池、LRU 缓存、xxhash64 缓存键、原子操作
日志订阅 支持 3 种背压策略(丢旧、丢新、阻塞超时)
运行时控制 动态调整级别、格式开关、DLP 开关
上下文传播 自定义 ContextPropagator,自动注入 trace / user 等字段
动态渲染 内置进度条、倒计时、加载动画
日志限流 令牌桶算法,防止日志风暴

日志级别

slog.SetLevelTrace()          // 最详细
slog.SetLevelDebug()
slog.SetLevelInfo()           // 默认
slog.SetLevelWarn()
slog.SetLevelError()
slog.SetLevelFatal()          // 记录后 os.Exit(1)

// 动态设置(支持 int / string / Level)
slog.SetLevel("debug")
slog.SetLevel(-4)
slog.SetLevel(slog.LevelDebug)
slog.SetLevel(slog.LevelWarn) // 注意这里是指 slog 包中的 Level

创建 Logger

基础创建
// 默认 stdout
logger := slog.NewLogger(os.Stdout, false, false)

// 带配置
cfg := slog.DefaultConfig()
cfg.SetEnableText(true)
cfg.SetEnableJSON(true)
cfg.NoColor = true
logger := slog.NewLoggerWithConfig(os.Stdout, cfg)
Builder 模式(推荐)
logger := slog.NewLoggerBuilder().
    WithWriter(os.Stdout).
    WithModule("order-service").
    WithGroup("http").
    WithAttrs(slog.String("req_id", "r-1"), slog.Int("version", 2)).
    EnableText(true).
    EnableJSON(true).
    EnableDLP(true).
    Build()
多格式 Builder
import outputnet "github.com/feymanlee/slog/modules/output/net"

// Logfmt(接入 Loki / Vector)
logger := slog.NewLoggerBuilder().UseLogfmt().Build()

// GELF(接入 Graylog / Logstash)
logger := slog.NewLoggerBuilder().UseGELF(nil).Build()

// 网络输出(TCP/UDP)
logger := slog.NewLoggerBuilder().UseNetOutput(&outputnet.SenderOption{
    Network: "tcp",
    Address: "logs.example.com:514",
}).Build()
模块化 Logger
userLogger := slog.Default("user-service")
authLogger := slog.Default("auth-service")

// WithGroup 分组
logger := slog.WithGroup("api")
logger.Info("请求处理", "method", "GET", "path", "/users")

数据脱敏 (DLP)

启用
slog.EnableDLPLogger()

// 或通过 Builder
logger := slog.NewLoggerBuilder().EnableDLP(true).Build()
自动脱敏

启用 DLP 后,日志文本中的敏感信息会被自动脱敏:

logger.Info("用户登录",
    "phone", "13812345678",       // → 138****5678
    "email", "user@example.com",   // → use***@example.com
)
结构体标签脱敏
type UserInfo struct {
    Name     string `dlp:"chinese_name"`
    Phone    string `dlp:"mobile_phone"`
    Email    string `dlp:"email"`
    IDCard   string `dlp:"id_card"`
    BankCard string `dlp:"bank_card"`
}

支持高级用法:dlp:"type,recursive"(递归脱敏嵌套结构体)、dlp:"custom:strategy_name"(自定义策略)。

Engine 级直接调用
import "github.com/feymanlee/slog/dlp"

engine := dlp.NewDlpEngine()
engine.Enable()

// 文本脱敏
masked := engine.DesensitizeText("手机号:13812345678,邮箱:user@example.com")

// 结构体脱敏
engine.DesensitizeStructAdvanced(&userInfo)

// 仅脱敏属性值(消息原文不动)
msg, attrs := engine.DesensitizeAttrsOnly("原始消息", map[string]string{
    "phone": "13812345678",
    "role":  "admin",
})
Matcher 管理
engine := dlp.NewDlpEngine()
engine.Enable()

// 禁用指定 matcher(variadic,更简洁)
engine.DisableMatchers("ipv4", "ipv6")

// 重新启用
engine.EnableMatchers("ipv4")

// 单个精确控制
engine.SetMatcherEnabled("email", false)

// 查询状态
engine.IsMatcherDisabled("email")        // bool
engine.DisabledMatchers()                  // []string
engine.EnabledMatchers()                   // []string
engine.GetSupportedTypes()                 // []string
支持的 36 种敏感信息类型
类别 类型
个人身份 chinese_name id_card passport social_security license_number
联系方式 mobile_phone landline email address postal_code
金融信息 bank_card credit_card iban swift
网络标识 ipv4 ipv6 mac url domain
设备标识 imei plate vin device_id uuid
密钥令牌 api_key jwt access_token password username
加密哈希 md5 sha1 sha256
其他 lat_lng medical_id company_id git_repo

username api_key access_token password 因误报率高,默认不参与自由文本扫描,但结构体标签 dlp:"username" 等仍可显式使用。

输出格式控制

// 独立控制文本 / JSON 开关
slog.EnableTextLogger()
slog.EnableJSONLogger()
slog.DisableTextLogger()
slog.DisableJSONLogger()

// 两者可同时启用
slog.EnableTextLogger()
slog.EnableJSONLogger()

文件日志

writer := slog.NewWriter("logs/app.log").
    SetMaxSize(100).      // 单文件最大 100MB
    SetMaxAge(7).         // 保留 7 天
    SetMaxBackups(10).    // 最多 10 个备份
    SetCompress(true)     // gzip 压缩旧文件

logger := slog.NewLogger(writer, true, false)

运行时控制

// 获取状态快照
snapshot := slog.GetRuntimeSnapshot()
// snapshot.Level / .TextEnabled / .JSONEnabled / .DLPEnabled / .DLPVersion

// 动态调整
slog.ApplyRuntimeOption("level", "warn")
slog.ApplyRuntimeOption("json", "on")
slog.ApplyRuntimeOption("text", "off")
slog.ApplyRuntimeOption("dlp", "on")

日志订阅

// 基础订阅
ch, cancel := slog.Subscribe(1000)
defer cancel()

// 高级订阅(背压控制)
ch, cancel := slog.SubscribeWithOptions(slog.SubscribeOptions{
    BufferSize:   1000,
    Backpressure: slog.SubscriptionDropOldest, // DropOldest / DropNewest / BlockWithTimeout
    BlockTimeout: 5 * time.Millisecond,
})

go func() {
    for event := range ch {
        event.Record    // 结构化视图(已应用 formatter / DLP / context 字段)
        event.Rendered  // 当前激活输出格式的最终渲染结果
        event.Format    // "text" / "json" / ""
    }
}()

// 订阅统计
stats := slog.GetSubscriptionStats()       // 汇总
detail := slog.GetSubscriberStats(id)       // 单个
all    := slog.ListSubscriberStats()        // 全部

上下文传播

// 注册传播器
slog.SetContextPropagator(func(ctx context.Context) []slog.Attr {
    attrs := make([]slog.Attr, 0, 2)
    if traceID, ok := ctx.Value("trace_id").(string); ok {
        attrs = append(attrs, slog.String("trace_id", traceID))
    }
    if userID, ok := ctx.Value("user_id").(string); ok {
        attrs = append(attrs, slog.String("user_id", userID))
    }
    return attrs
})

// 使用
ctx := context.WithValue(context.Background(), "trace_id", "abc-123")
logger.WithContext(ctx).Info("请求完成")  // 自动注入 trace_id

动态渲染

// 进度条(0% → 100%,持续 3 秒)
slog.Progress("部署中", 3000)

// 倒计时
slog.Countdown("服务关闭", 10)

// 加载动画
slog.Loading("正在加载数据", 5)

日志限流

// 令牌桶:1000 条/秒,突发上限 100
slog.ConfigureRecordLimiter(1000, 100)

// 关闭限流
slog.ConfigureRecordLimiter(0, 0)

性能优化配置

cfg := &slog.Config{
    MaxFormatCacheSize:    2000,   // 格式字符串缓存上限
    StringBuilderPoolSize: 200,    // 对象池大小
    LogInternalErrors:     false,  // 生产环境关闭内部错误日志
    NoColor:               true,   // 生产环境关闭颜色
    AddSource:             false,  // 生产环境关闭源码位置
    TimeFormat:            time.RFC3339,
}
logger := slog.NewLoggerWithConfig(os.Stdout, cfg)

实际性能取决于 Go 版本、硬件、输出目标和配置。可在当前环境运行基准测试:

go test -run '^$' -bench . -benchmem ./...

模块系统

模块 说明
formatter 时间格式化、错误格式化、HTTP 请求格式化
multi Fanout 多路分发
webhook HTTP POST JSON 输出,支持自定义 Codec 和 Transport
syslog TCP/UDP 输出,使用 @cee: 前缀并支持自定义 Codec
output/gelf GELF 1.1 输出
output/logfmt Logfmt 输出(Loki / Vector 友好)
output/net 通用 TCP/UDP 输出,支持自定义 Codec
logger := slog.NewLoggerBuilder().
    UseLogfmt().   // 或 UseGELF(nil) 或 UseNetOutput(...)
    Build()
Logger Module 所有权

Logger.Use 将模块安装到当前 Logger Lineage。通过 With、WithGroup 或 WithContext 派生的 Logger 共享同一个模块目录;分别创建的 Logger 拥有独立目录, 因此可以安装名称相同但配置不同的模块。

package main

import (
    "fmt"
    "os"

    "github.com/feymanlee/slog"
    "github.com/feymanlee/slog/modules"
    _ "github.com/feymanlee/slog/modules/formatter" // 注册 formatter 工厂
)

func main() {
    logger := slog.NewLogger(os.Stdout, true, false)

    formatterModule, err := modules.CreateModule("formatter", modules.Config{
        "type":        "error",
        "replacement": "error",
    })
    if err != nil {
        panic(err)
    }
    if err := logger.UseWithError(formatterModule); err != nil {
        panic(err)
    }

    // 派生 Logger 与父 Logger 共享模块目录;更新会作用于整个 lineage。
    child := logger.WithGroup("request")
    if err := child.UpdateModuleConfig("formatter", modules.Config{
        "type":        "error",
        "replacement": "err",
    }); err != nil {
        panic(err)
    }

    fmt.Println(logger.Diagnostics())
}
  • Use 保持链式调用并忽略安装错误;需要处理无效模块或重名错误时使用 UseWithError。
  • logger.UpdateModuleConfig 只更新当前 lineage。包级 slog.UpdateModuleConfig 先更新 Default Logger,仅在未找到模块时回退到旧的全局 modules.Registry。
  • logger.Diagnostics 只观察当前 lineage;slog.RegisteredModules 和 slog.CollectModuleDiagnostics 只观察 Default Logger。
  • 只有 TypeFormatter 模块参与 Logger 属性格式化。TypeHandler 与 TypeSink 的自动投递仍留待异步输出生命周期统一后实现。
  • Logger Module 与运行时 formatter、全局 DLP 分属不同机制;安装模块不会切断 Logger 对后两者的动态继承。

并发安全

Logger Module 的安装、诊断、配置更新和 formatter 快照读取支持并发使用;同一模块的配置更新会被串行化。Logger 可安全跨 goroutine 共享,全局配置变更使用原子操作。

开发 & 构建

make build          # 编译
make test           # 运行测试
make test-race      # 带 race 检测的测试
make test-coverage  # 测试 + 覆盖率报告
make lint           # golangci-lint
make fmt            # gofmt + goimports
make tidy           # go mod tidy + verify
make clean          # 清理构建产物
make help           # 查看所有目标

文档

许可证

MIT

致谢

本项目参考了 DarkiT/slog,感谢原项目提供的设计与实现基础。

基于 Go 官方 log/slog 包扩展开发。

Documentation

Overview

Package slog provides a high-performance, feature-rich structured logging library for Go, extending the standard log/slog package.

Built on Go 1.23+'s official log/slog, slog adds enterprise-grade features: DLP data desensitization (36 sensitive types), tiered object pools, log subscription with backpressure control, modular extensions, and runtime dynamic switches.

Installation

go get github.com/feymanlee/slog@latest

Quick Start

logger := slog.Default()
logger.Info("服务启动", "port", 8080, "env", "production")

Log Levels

Six levels from lowest to highest:

LevelTrace = -8   // Most detailed
LevelDebug = -4
LevelInfo  = 0    // Default
LevelWarn  = 4
LevelError = 8
LevelFatal = 12   // Calls os.Exit(1)

Set levels globally:

slog.SetLevelDebug()
slog.SetLevel("info")
slog.SetLevel(slog.LevelWarn)

Creating Loggers

Builder pattern (recommended):

logger := slog.NewLoggerBuilder().
    WithModule("order-service").
    WithGroup("http").
    EnableJSON(true).
    EnableDLP(true).
    Build()

Direct creation:

logger := slog.NewLoggerWithConfig(os.Stdout, &slog.Config{
    EnableText: boolPtr(true),
    EnableJSON: boolPtr(true),
    NoColor:    true,
})

Output format variants:

logger := slog.NewLoggerBuilder().UseLogfmt().Build()    // Loki / Vector
logger := slog.NewLoggerBuilder().UseGELF(nil).Build()   // Graylog
logger := slog.NewLoggerBuilder().UseNetOutput(opts).Build() // TCP/UDP

DLP Data Desensitization

Enable globally:

slog.EnableDLPLogger()

Engine-level usage:

engine := dlp.NewDlpEngine()
engine.Enable()
masked := engine.DesensitizeText("手机号:13812345678") // → 手机号:138****5678

Struct tag desensitization:

type User struct {
    Name  string `dlp:"chinese_name"`
    Phone string `dlp:"mobile_phone"`
    Email string `dlp:"email"`
}

Matcher management:

engine.DisableMatchers("ipv4", "ipv6")  // Disable (variadic)
engine.EnableMatchers("ipv4")            // Re-enable
engine.SetMatcherEnabled("email", false) // Toggle single
engine.EnabledMatchers()                 // List all enabled

Supported types: chinese_name, id_card, mobile_phone, email, bank_card, ipv4, ipv6, mac, url, domain, jwt, uuid, md5, sha256, plate, vin, imei, license_plate, postal_code, address, password, username, api_key, access_token, passport, social_security, credit_card, iban, swift, lat_lng, medical_id, company_id, git_repo, device_id.

Runtime Control

snapshot := slog.GetRuntimeSnapshot()
slog.ApplyRuntimeOption("level", "warn")
slog.ApplyRuntimeOption("json", "on")
slog.ApplyRuntimeOption("dlp", "on")

Subscription

ch, cancel := slog.Subscribe(1000)
defer cancel()

ch, cancel = slog.SubscribeWithOptions(slog.SubscribeOptions{
    BufferSize:   1000,
    Backpressure: slog.SubscriptionDropOldest, // DropOldest / DropNewest / BlockWithTimeout
})

Context Propagation

slog.SetContextPropagator(func(ctx context.Context) []slog.Attr {
    if v, ok := ctx.Value("trace_id").(string); ok {
        return []slog.Attr{slog.String("trace_id", v)}
    }
    return nil
})

Thread Safety

All operations are goroutine-safe. Logger instances can be freely shared.

Performance

Run benchmarks on the target Go version and hardware:

go test -run '^$' -bench . -benchmem ./...

For more information, see https://pkg.go.dev/github.com/feymanlee/slog

Index

Constants

View Source
const (
	// TimeKey 是标准 slog 内置时间字段名。
	TimeKey = stdslog.TimeKey
	// LevelKey 是标准 slog 内置级别字段名。
	LevelKey = stdslog.LevelKey
	// MessageKey 是标准 slog 内置消息字段名。
	MessageKey = stdslog.MessageKey
	// SourceKey 是标准 slog 内置调用源字段名。
	SourceKey = stdslog.SourceKey
)
View Source
const (
	// KindAny 表示任意 Go 值。
	KindAny = stdslog.KindAny
	// KindBool 表示 bool 值。
	KindBool = stdslog.KindBool
	// KindDuration 表示 time.Duration 值。
	KindDuration = stdslog.KindDuration
	// KindFloat64 表示 float64 值。
	KindFloat64 = stdslog.KindFloat64
	// KindInt64 表示 int64 值。
	KindInt64 = stdslog.KindInt64
	// KindString 表示 string 值。
	KindString = stdslog.KindString
	// KindTime 表示 time.Time 值。
	KindTime = stdslog.KindTime
	// KindUint64 表示 uint64 值。
	KindUint64 = stdslog.KindUint64
	// KindGroup 表示属性组。
	KindGroup = stdslog.KindGroup
	// KindLogValuer 表示延迟求值的 LogValuer。
	KindLogValuer = stdslog.KindLogValuer
)
View Source
const (
	Name    = "feymanlee/slog"
	Version = "v1.0.0"
)

Variables

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

)

Functions

func ConfigureRecordLimiter

func ConfigureRecordLimiter(ratePerSecond, burst int)

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

func Countdown

func Countdown(msg string, seconds int)

Countdown 全局倒计时显示

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

func Debug

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

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

func DebugContext

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

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

func Debugf

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

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

func DebugfContext

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

DebugfContext 记录格式化 Debug 日志并传播上下文。

func DefaultCallerSkipPrefixes

func DefaultCallerSkipPrefixes() []string

DefaultCallerSkipPrefixes 返回默认建议跳过的调用栈前缀,供上层按需复用。 仅包含 slog 自己稳定暴露的 wrapper 入口,避免对具体仓库结构或源码路径产生耦合。

func DisableDLPLogger

func DisableDLPLogger()

DisableDLPLogger 禁用日志脱敏功能

func DisableJSONLogger

func DisableJSONLogger()

DisableJSONLogger 禁用 JSON 日志记录器。

func DisableTextLogger

func DisableTextLogger()

DisableTextLogger 禁用文本日志记录器。

func EnableDLPLogger

func EnableDLPLogger()

EnableDLPLogger 启用日志脱敏功能

func EnableDiagnosticsLogging

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

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

func EnableJSONLogger

func EnableJSONLogger()

EnableJSONLogger 启用 JSON 日志记录器。

func EnableTextLogger

func EnableTextLogger()

EnableTextLogger 启用文本日志记录器。

func Error

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

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

func ErrorContext

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

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

func Errorf

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

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

func ErrorfContext

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

ErrorfContext 记录格式化 Error 日志并传播上下文。

func Fatal

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

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

func Fatalf

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

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

func GetErrorComponent

func GetErrorComponent(err error) string

GetErrorComponent 获取错误组件名称

func GetErrorOperation

func GetErrorOperation(err error) string

GetErrorOperation 获取错误操作名称

func Info

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

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

func InfoContext

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

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

func Infof

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

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

func InfofContext

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

InfofContext 记录格式化 Info 日志并传播上下文。

func IsDLPEnabled

func IsDLPEnabled() bool

IsDLPEnabled 检查DLP是否启用

func IsErrorType

func IsErrorType(err error, errorType ErrorType) bool

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

func ListFormatters

func ListFormatters() []string

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

func Loading

func Loading(msg string, seconds int)

Loading 全局加载动画

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

func NewLogLogger

func NewLogLogger(h Handler, level Level) *log.Logger

NewLogLogger 映射标准库 log/slog.NewLogLogger。

func NewWriter

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

func Progress(msg string, durationMs int)

Progress 全局进度显示

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

func RegisterCallerSkipPrefix

func RegisterCallerSkipPrefix(prefix string)

RegisterCallerSkipPrefix 注册需要跳过的调用栈前缀,供外部 wrapper 透传真实业务 source。

func RegisterDefaultCallerSkipPrefixes

func RegisterDefaultCallerSkipPrefixes()

RegisterDefaultCallerSkipPrefixes 注册 slog 默认 wrapper 前缀。

func RegisterFormatter

func RegisterFormatter(name string, fn FormatterFunc) string

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

func RegisteredModules

func RegisteredModules() []string

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

func RemoveFormatter

func RemoveFormatter(id string) bool

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

func ResetCallerSkipPrefixes

func ResetCallerSkipPrefixes(prefixes ...string)

ResetCallerSkipPrefixes 重置调用栈跳过前缀,便于测试或上层完全自定义。

func SetAttrFormatterOrder

func SetAttrFormatterOrder(order ...AttrFormatterRule)

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

func SetContextPropagator

func SetContextPropagator(fn ContextPropagatorFunc)

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

func SetDefault

func SetDefault(logger any)

SetDefault 设置默认 Logger,并同步标准 log/slog 与本包顶层日志入口。

logger 支持 *SlogLogger 与本包增强 *Logger,便于兼容标准库示例和 feymanlee/slog 的增强入口。

func SetLevel

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

func SetRecordRouter(router RecordRouter)

SetRecordRouter 自定义模块路由策略。

func SetTimeFormat

func SetTimeFormat(format string)

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

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

func Subscribe

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

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

参数:

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

返回值:

  • <-chan SubscriptionEvent: 只读的订阅事件通道,包含结构化视图和当前激活输出对应的最终渲染结果
  • context.CancelFunc: 取消订阅的函数,调用后会停止接收日志并清理资源

func SubscribeWithOptions

func SubscribeWithOptions(options SubscribeOptions) (<-chan SubscriptionEvent, context.CancelFunc)

SubscribeWithOptions 使用可配置背压策略订阅日志记录。 订阅者拿到的是统一发布视图,而不是原始未处理的内部 record。

func Trace

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

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

func TraceContext

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

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

func Tracef

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

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

func TracefContext

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

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

func UpdateModuleConfig

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

UpdateModuleConfig 热更新默认 Logger 中已注册模块的配置。

func UseModuleWithError

func UseModuleWithError(module modules.Module) error

UseModuleWithError 全局注册模块,并返回注册错误,便于第三方模块接入时显式处理失败。

func Warn

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

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

func WarnContext

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

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

func Warnf

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

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

func WarnfContext

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

WarnfContext 记录格式化 Warn 日志并传播上下文。

Types

type Attr

type Attr = stdslog.Attr

Attr 映射标准库 log/slog.Attr。

func Any

func Any(key string, v any) Attr

Any 映射标准库 log/slog.Any。

func Bool

func Bool(key string, v bool) Attr

Bool 映射标准库 log/slog.Bool。

func Duration

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

Duration 映射标准库 log/slog.Duration。

func Float64

func Float64(key string, v float64) Attr

Float64 映射标准库 log/slog.Float64。

func Group

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

Group 映射标准库 log/slog.Group。

func GroupAttrs

func GroupAttrs(key string, attrs ...Attr) Attr

GroupAttrs 用已有 Attr 构造分组,等价于标准库较新版本的 log/slog.GroupAttrs。

func Int

func Int(key string, v int) Attr

Int 映射标准库 log/slog.Int。

func Int64

func Int64(key string, v int64) Attr

Int64 映射标准库 log/slog.Int64。

func String

func String(key string, v string) Attr

String 映射标准库 log/slog.String。

func Time

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

Time 映射标准库 log/slog.Time。

func Uint64

func Uint64(key string, v uint64) Attr

Uint64 映射标准库 log/slog.Uint64。

type AttrFormatterRule

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

type Config

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

func DefaultConfig() *Config

DefaultConfig 返回默认配置

func (*Config) InheritJSONOutput

func (c *Config) InheritJSONOutput()

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

func (*Config) InheritTextOutput

func (c *Config) InheritTextOutput()

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

func (*Config) SetEnableJSON

func (c *Config) SetEnableJSON(enabled bool)

SetEnableJSON 显式设置 JSON 输出开关

func (*Config) SetEnableText

func (c *Config) SetEnableText(enabled bool)

SetEnableText 显式设置文本输出开关

type ContextPropagatorFunc

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

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

type ErrorType

type ErrorType int

ErrorType 错误类型枚举

const (
	ErrorTypeInvalidInput ErrorType = iota
	ErrorTypeProcessing
	ErrorTypeConfiguration
	ErrorTypeInitialization
	ErrorTypeInternal
)

func (ErrorType) String

func (et ErrorType) String() string

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

type Fields

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

Fields 存储上下文字段

type FormatterFunc

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

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

type GlobalConfig

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

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

type Handler

type Handler = stdslog.Handler

Handler 映射标准库 log/slog.Handler。

var DiscardHandler Handler = discardHandler{}

DiscardHandler 丢弃所有日志输出。

func ApplyModulesToHandler

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

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

func NewConsoleHandler

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

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

type HandlerOptions

type HandlerOptions = stdslog.HandlerOptions

HandlerOptions 映射标准库 log/slog.HandlerOptions。

func NewOptions

func NewOptions(options *HandlerOptions) *HandlerOptions

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

type JSONHandler

type JSONHandler = stdslog.JSONHandler

JSONHandler 映射标准库 log/slog.JSONHandler。

func NewJSONHandler

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

NewJSONHandler 映射标准库 log/slog.NewJSONHandler。

type Kind

type Kind = stdslog.Kind

Kind 映射标准库 log/slog.Kind。

type Level

type Level = stdslog.Level

Level 映射标准库 log/slog.Level。

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

func GetLevel

func GetLevel() Level

GetLevel 获取全局日志级别。

func SetLogLoggerLevel

func SetLogLoggerLevel(level Level) (oldLevel Level)

SetLogLoggerLevel 映射标准库 log/slog.SetLogLoggerLevel。

type LevelVar

type LevelVar = stdslog.LevelVar

LevelVar 映射标准库 log/slog.LevelVar。

type Leveler

type Leveler = stdslog.Leveler

Leveler 映射标准库 log/slog.Leveler。

type LogValuer

type LogValuer = stdslog.LogValuer

LogValuer 映射标准库 log/slog.LogValuer。

type Logger

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

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

func Default

func Default(modules ...string) *Logger

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

func GetGlobalLogger

func GetGlobalLogger() *Logger

GetGlobalLogger 返回全局 logger 实例。

func NewGELFLogger

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

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

func NewLogfmtLogger

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

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

func NewLogger

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

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

func NewLoggerWithConfig

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

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

func ResetGlobalLogger

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

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

func UseModule

func UseModule(module modules.Module) *Logger

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

func With

func With(args ...any) *Logger

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

func WithGroup

func WithGroup(name string) *Logger

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

  • name: 日志组的名称

返回:

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

func WithValue

func WithValue(key string, val any) *Logger

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

func (*Logger) Countdown

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

Countdown 显示倒计时。

func (*Logger) Debug

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

Debug 记录Debug级别的日志。

func (*Logger) DebugContext

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

DebugContext 记录 Debug 级别日志,附带上下文传播。

func (*Logger) Debugf

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

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

func (*Logger) DebugfContext

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

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

func (*Logger) Diagnostics

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

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

func (*Logger) Enabled

func (l *Logger) Enabled(ctx context.Context, level Level) bool

Enabled 判断当前 Logger 在给定上下文和级别下是否会输出日志。

func (*Logger) Error

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

Error 记录错误级别的日志

func (*Logger) ErrorContext

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

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

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

func (*Logger) Fatal

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

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

func (*Logger) FatalContext

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

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

func (*Logger) Fatalf

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

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

func (*Logger) FatalfContext

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

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

func (*Logger) GetLevel

func (l *Logger) GetLevel() Level

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

func (*Logger) GetSlogLogger

func (l *Logger) GetSlogLogger() *SlogLogger

GetSlogLogger 方法

func (*Logger) Handler

func (l *Logger) Handler() Handler

Handler 返回当前 Logger 采用的底层标准 slog.Handler。

func (*Logger) Info

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

Info 记录信息级别的日志

func (*Logger) InfoContext

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

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

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

func (*Logger) Loading

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

Loading 显示加载动画。

func (*Logger) Log

func (l *Logger) Log(ctx context.Context, level Level, msg string, args ...any)

Log 以指定级别记录日志,兼容标准库 slog.Logger.Log。

func (*Logger) LogAttrs

func (l *Logger) LogAttrs(ctx context.Context, level Level, msg string, attrs ...Attr)

LogAttrs 以指定级别记录 Attr 列表,兼容标准库 slog.Logger.LogAttrs。

func (*Logger) Printf

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

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

func (*Logger) Println

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

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

func (*Logger) Progress

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

Progress 显示进度百分比。

func (*Logger) SetLevel

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

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

func (*Logger) Trace

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

Trace 记录跟踪级别的日志

func (*Logger) TraceContext

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

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

func (*Logger) Tracef

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

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

func (*Logger) TracefContext

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

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

func (*Logger) UpdateModuleConfig

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

UpdateModuleConfig 热更新当前 Logger Lineage 中已注册模块的配置。

func (*Logger) Use

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

Use 为 Logger 添加模块实例。

func (*Logger) UseWithError

func (l *Logger) UseWithError(module modules.Module) error

UseWithError 为 Logger 添加模块实例,并向调用方返回注册错误。

func (*Logger) Warn

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

Warn 记录警告级别的日志

func (*Logger) WarnContext

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

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

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

WithContext 创建带有上下文的新Logger

func (*Logger) WithDeadline

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

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

WithModules 便捷添加多个模块。

func (*Logger) WithTimeout

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

WithTimeout 创建带超时的Logger

func (*Logger) WithValue

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

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

type LoggerBuilder

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

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

func NewLoggerBuilder

func NewLoggerBuilder() *LoggerBuilder

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

func (*LoggerBuilder) Build

func (b *LoggerBuilder) Build() *Logger

Build 构建 Logger 实例。

func (*LoggerBuilder) EnableDLP

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

EnableDLP 控制 DLP 脱敏能力。

func (*LoggerBuilder) EnableJSON

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

EnableJSON 控制 JSON 输出。

func (*LoggerBuilder) EnableText

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

EnableText 控制文本输出。

func (*LoggerBuilder) UseGELF

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

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

func (*LoggerBuilder) UseLogfmt

func (b *LoggerBuilder) UseLogfmt() *LoggerBuilder

UseLogfmt 切换为 logfmt 输出。

func (*LoggerBuilder) UseNetOutput

func (b *LoggerBuilder) UseNetOutput(opts *outputnet.SenderOption) *LoggerBuilder

UseNetOutput 切换为通用网络输出,适用于任意 TCP/UDP 接收端。

func (*LoggerBuilder) WithAttrs

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

WithAttrs 预置结构化字段。

func (*LoggerBuilder) WithConfig

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

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

func (*LoggerBuilder) WithGroup

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

WithGroup 预置日志分组。

func (*LoggerBuilder) WithModule

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

WithModule 为日志添加模块字段。

func (*LoggerBuilder) WithWriter

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

WithWriter 指定输出目标。

type LoggerManager

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

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

func GetManager

func GetManager() *LoggerManager

GetManager 获取全局管理器实例

func (*LoggerManager) Configure

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

Configure 配置全局设置 会同步运行时全局开关,并就地更新已存在实例,避免状态分叉。

func (*LoggerManager) GetDefault

func (lm *LoggerManager) GetDefault() *Logger

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

func (*LoggerManager) GetNamed

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

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

func (*LoggerManager) GetStats

func (lm *LoggerManager) GetStats() ManagerStats

GetStats 获取管理器统计信息

func (*LoggerManager) ListInstances

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

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

func (*LoggerManager) Reset

func (lm *LoggerManager) Reset()

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

func (*LoggerManager) Shutdown

func (lm *LoggerManager) Shutdown()

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

type ManagerStats

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

Stats 返回管理器统计信息

type ModuleDiagnostics

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

func CollectModuleDiagnostics() []ModuleDiagnostics

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

type MultiHandler

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

MultiHandler 将同一条记录分发给多个 Handler。

func NewMultiHandler

func NewMultiHandler(handlers ...Handler) *MultiHandler

NewMultiHandler 创建 MultiHandler,并复制输入切片以避免外部突变影响。

func (*MultiHandler) Enabled

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

Enabled 判断任一子 Handler 是否会处理当前级别。

func (*MultiHandler) Handle

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

Handle 将记录发送给所有启用的子 Handler。

func (*MultiHandler) WithAttrs

func (h *MultiHandler) WithAttrs(attrs []Attr) Handler

WithAttrs 返回带固定属性的新 MultiHandler。

func (*MultiHandler) WithGroup

func (h *MultiHandler) WithGroup(name string) Handler

WithGroup 返回带分组的新 MultiHandler。

type Record

type Record = stdslog.Record

Record 映射标准库 log/slog.Record。

func NewRecord

func NewRecord(t time.Time, level Level, msg string, pc uintptr) Record

NewRecord 映射标准库 log/slog.NewRecord。

type RecordRouter

type RecordRouter func(record Record) []string

RecordRouter 定义模块路由策略,返回要接收当前记录的模块名列表。

type RuntimeSnapshot

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

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

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

func GetRuntimeSnapshot

func GetRuntimeSnapshot() RuntimeSnapshot

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

type SlogError

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

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

func NewConfigurationError

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

NewConfigurationError 创建配置错误

func NewDLPError

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

NewDLPError 创建DLP相关错误

func NewFormatterError

func NewFormatterError(operation string, cause error) *SlogError

NewFormatterError 创建格式化器相关错误

func NewInitializationError

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

NewInitializationError 创建初始化错误

func NewInternalError

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

NewInternalError 创建内部错误

func NewInvalidInputError

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

NewInvalidInputError 创建输入无效错误

func NewModuleError

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

NewModuleError 创建模块相关错误

func NewProcessingError

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

NewProcessingError 创建处理错误

func (*SlogError) Error

func (e *SlogError) Error() string

Error 实现error接口

func (*SlogError) GetDetails

func (e *SlogError) GetDetails() map[string]any

GetDetails 获取详细信息

func (*SlogError) Unwrap

func (e *SlogError) Unwrap() error

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

func (*SlogError) WithDetails

func (e *SlogError) WithDetails(key string, value any) *SlogError

WithDetails 添加详细信息

type SlogLogger

type SlogLogger = stdslog.Logger

SlogLogger 映射标准库 log/slog.Logger,用于避免与本包增强 Logger 重名。

func GetSlogLogger

func GetSlogLogger() *SlogLogger

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

func New

func New(handler Handler) *SlogLogger

func StdDefault

func StdDefault() *SlogLogger

StdDefault 返回标准库 log/slog 当前默认 logger。

type Source

type Source = stdslog.Source

Source 映射标准库 log/slog.Source。

type StdLogger

type StdLogger = stdslog.Logger

StdLogger 是 SlogLogger 的语义别名,便于需要强调标准库 logger 的调用方使用。

type SubscribeOptions

type SubscribeOptions struct {
	// BufferSize 订阅缓冲区大小。
	BufferSize uint16
	// Backpressure 背压策略;空值时默认 drop_oldest。
	Backpressure SubscriptionBackpressurePolicy
	// BlockTimeout 仅在 block_with_timeout 模式下生效。
	BlockTimeout time.Duration
}

SubscribeOptions 订阅选项。

type SubscriberStats

type SubscriberStats struct {
	ID            int64                          `json:"id"`
	State         string                         `json:"state"`
	BufferSize    int                            `json:"buffer_size"`
	QueueLen      int                            `json:"queue_len"`
	Backpressure  SubscriptionBackpressurePolicy `json:"backpressure"`
	BlockTimeout  time.Duration                  `json:"block_timeout"`
	CreatedAt     time.Time                      `json:"created_at"`
	Published     uint64                         `json:"published"`
	Delivered     uint64                         `json:"delivered"`
	Dropped       uint64                         `json:"dropped"`
	DroppedOldest uint64                         `json:"dropped_oldest"`
	DroppedNewest uint64                         `json:"dropped_newest"`
	DroppedTimed  uint64                         `json:"dropped_timed_out"`
	HighWatermark uint64                         `json:"high_watermark"`
}

SubscriberStats 描述单个订阅者运行状态与背压统计。

func GetSubscriberStats

func GetSubscriberStats(id int64) (SubscriberStats, bool)

GetSubscriberStats 根据订阅ID返回统计快照。

func ListSubscriberStats

func ListSubscriberStats() []SubscriberStats

ListSubscriberStats 返回所有订阅者统计快照(按订阅ID升序)。

type SubscriptionBackpressurePolicy

type SubscriptionBackpressurePolicy string

SubscriptionBackpressurePolicy 定义订阅通道在高压场景下的背压策略。

const (
	// SubscriptionDropOldest 丢弃最旧消息,优先保留最新数据(默认)。
	SubscriptionDropOldest SubscriptionBackpressurePolicy = "drop_oldest"
	// SubscriptionDropNewest 丢弃最新消息,优先保留已入队数据。
	SubscriptionDropNewest SubscriptionBackpressurePolicy = "drop_newest"
	// SubscriptionBlockWithTimeout 在超时时间内阻塞等待可写,超时后丢弃。
	SubscriptionBlockWithTimeout SubscriptionBackpressurePolicy = "block_with_timeout"
)

type SubscriptionEvent

type SubscriptionEvent struct {
	// Record 是已应用前缀、formatter、DLP 与 context 字段后的结构化日志。
	Record Record
	// Rendered 是与当前激活主输出一致的最终语义化内容;若未启用任何输出则为空。
	Rendered string
	// Format 表示 Rendered 采用的格式,取值为 text、json 或空字符串。
	Format string
}

SubscriptionEvent 描述一次统一发布后的订阅事件。 其中 Record 保留结构化视图,Rendered 则严格跟随当前激活的主输出格式。

type SubscriptionStats

type SubscriptionStats struct {
	Subscribers        int    `json:"subscribers"`
	ActiveSubscribers  int    `json:"active_subscribers"`
	ClosingSubscribers int    `json:"closing_subscribers"`
	ClosedSubscribers  int    `json:"closed_subscribers"`
	Published          uint64 `json:"published"`
	Delivered          uint64 `json:"delivered"`
	Dropped            uint64 `json:"dropped"`
	DroppedOldest      uint64 `json:"dropped_oldest"`
	DroppedNewest      uint64 `json:"dropped_newest"`
	DroppedTimed       uint64 `json:"dropped_timed_out"`
	Evicted            uint64 `json:"evicted"`
}

SubscriptionStats 汇总所有订阅者统计。

func GetSubscriptionStats

func GetSubscriptionStats() SubscriptionStats

GetSubscriptionStats 返回订阅系统汇总统计。

type TextHandler

type TextHandler = stdslog.TextHandler

TextHandler 映射标准库 log/slog.TextHandler。

func NewTextHandler

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

NewTextHandler 映射标准库 log/slog.NewTextHandler。

type Value

type Value = stdslog.Value

Value 映射标准库 log/slog.Value。

func AnyValue

func AnyValue(v any) Value

AnyValue 映射标准库 log/slog.AnyValue。

func BoolValue

func BoolValue(v bool) Value

BoolValue 映射标准库 log/slog.BoolValue。

func DurationValue

func DurationValue(v time.Duration) Value

DurationValue 映射标准库 log/slog.DurationValue。

func Float64Value

func Float64Value(v float64) Value

Float64Value 映射标准库 log/slog.Float64Value。

func GroupValue

func GroupValue(args ...Attr) Value

GroupValue 映射标准库 log/slog.GroupValue。

func Int64Value

func Int64Value(v int64) Value

Int64Value 映射标准库 log/slog.Int64Value。

func IntValue

func IntValue(v int) Value

IntValue 映射标准库 log/slog.IntValue。

func StringValue

func StringValue(value string) Value

StringValue 映射标准库 log/slog.StringValue。

func TimeValue

func TimeValue(v time.Time) Value

TimeValue 映射标准库 log/slog.TimeValue。

func Uint64Value

func Uint64Value(v uint64) Value

Uint64Value 映射标准库 log/slog.Uint64Value。

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

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