slog

package module
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Jun 16, 2026 License: MIT Imports: 29 Imported by: 13

README

slog

Go Reference Go Report Card Go Version

基于 Go 1.23+ 官方 log/slog 扩展的高性能结构化日志库。内置 DLP 数据脱敏、分级对象池、日志订阅、模块化扩展,专为生产环境设计。

安装

go get github.com/darkit/slog@latest

要求 Go 1.23+

快速开始

package main

import (
    "os"
    "github.com/darkit/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
模块化架构 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
// 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/darkit/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)

性能指标:DLP 缓存命中 ~46ns/op(无缓存 ~2790ns/op),缓存键生成 ~314ns/op(xxhash64),内存复用率 95%+。

模块系统

模块 说明
formatter 时间格式化、错误格式化、HTTP 请求格式化
multi Fanout / Failover / Router 多输出模式
webhook HTTP 日志推送(支持 Slack / Discord / 自定义 Webhook)
syslog RFC5424 Syslog 协议输出
gelf Graylog 扩展日志格式
logfmt 键值对格式(Loki / Vector 友好)
output/net TCP/UDP 网络日志输出
logger := slog.NewLoggerBuilder().
    UseLogfmt().   // 或 UseGELF(nil) 或 UseNetOutput(...)
    Build()

并发安全

所有 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

致谢

基于 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/darkit/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

DLP cache hit:       ~46 ns/op
Cache key (xxhash64): ~314 ns/op
Memory reuse rate:   95%+ (tiered object pools)

For more information, see https://pkg.go.dev/github.com/darkit/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    = "darkit/slog"
	Version = "v0.2.0"
)

Variables

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

)

Functions

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 DefaultCallerSkipPrefixes added in v0.2.0

func DefaultCallerSkipPrefixes() []string

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

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 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 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 NewLogLogger added in v0.3.0

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

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

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 RegisterCallerSkipPrefix added in v0.2.0

func RegisterCallerSkipPrefix(prefix string)

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

func RegisterDefaultCallerSkipPrefixes added in v0.2.0

func RegisterDefaultCallerSkipPrefixes()

RegisterDefaultCallerSkipPrefixes 注册 slog 默认 wrapper 前缀。

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 ResetCallerSkipPrefixes added in v0.2.0

func ResetCallerSkipPrefixes(prefixes ...string)

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

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 SetDefault added in v0.3.0

func SetDefault(logger any)

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

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

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

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

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

参数:

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

返回值:

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

func SubscribeWithOptions added in v0.2.0

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

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

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 UseModuleWithError added in v0.3.0

func UseModuleWithError(module modules.Module) error

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

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 = 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 added in v0.3.0

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

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

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) []Attr

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

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 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 Attr) (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 = stdslog.Handler

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

var DiscardHandler Handler = discardHandler{}

DiscardHandler 丢弃所有日志输出。

func ApplyModulesToHandler added in v0.1.0

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

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

func NewConsoleHandler added in v0.0.2

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

type HandlerOptions = stdslog.HandlerOptions

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

func NewOptions added in v0.0.2

func NewOptions(options *HandlerOptions) *HandlerOptions

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

type JSONHandler added in v0.3.0

type JSONHandler = stdslog.JSONHandler

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

func NewJSONHandler added in v0.0.2

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

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

type Kind added in v0.3.0

type Kind = stdslog.Kind

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

type Level added in v0.0.2

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

func GetLevel() Level

GetLevel 获取全局日志级别。

func SetLogLoggerLevel added in v0.3.0

func SetLogLoggerLevel(level Level) (oldLevel Level)

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

type LevelVar added in v0.3.0

type LevelVar = stdslog.LevelVar

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

type Leveler added in v0.3.0

type Leveler = stdslog.Leveler

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

type LogValuer added in v0.3.0

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

func GetGlobalLogger() *Logger

GetGlobalLogger 返回全局 logger 实例。

func NewGELFLogger added in v0.1.3

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

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

func NewLogfmtLogger added in v0.1.3

func NewLogfmtLogger(w io.Writer, opts *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 ResetGlobalLogger added in v0.1.0

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

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

func UseModule added in v0.1.0

func UseModule(module modules.Module) *Logger

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

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 显示倒计时。

func (*Logger) Debug

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

Debug 记录Debug级别的日志。

func (*Logger) DebugContext added in v0.3.0

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 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) Enabled added in v0.3.0

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 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) 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() *SlogLogger

GetSlogLogger 方法

func (*Logger) Handler added in v0.3.0

func (l *Logger) Handler() Handler

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

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 显示加载动画。

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 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 显示进度百分比。

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) *Logger

Use 为 Logger 添加模块实例。

func (*Logger) UseWithError added in v0.3.0

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 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) *Logger

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 any) *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) UseNetOutput added in v0.2.0

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

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

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 配置全局设置 会同步运行时全局开关,并就地更新已存在实例,避免状态分叉。

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 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 MultiHandler added in v0.3.0

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

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

func NewMultiHandler added in v0.3.0

func NewMultiHandler(handlers ...Handler) *MultiHandler

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

func (*MultiHandler) Enabled added in v0.3.0

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

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

func (*MultiHandler) Handle added in v0.3.0

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

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

func (*MultiHandler) WithAttrs added in v0.3.0

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

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

func (*MultiHandler) WithGroup added in v0.3.0

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

WithGroup 返回带分组的新 MultiHandler。

type Record added in v0.0.8

type Record = stdslog.Record

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

func NewRecord added in v0.3.0

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

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

type RecordRouter added in v0.1.2

type RecordRouter func(record Record) []string

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

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]any
	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]any

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 any) *SlogError

WithDetails 添加详细信息

type SlogLogger added in v0.3.0

type SlogLogger = stdslog.Logger

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

func GetSlogLogger added in v0.0.16

func GetSlogLogger() *SlogLogger

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

func New added in v0.0.2

func New(handler Handler) *SlogLogger

func StdDefault added in v0.3.0

func StdDefault() *SlogLogger

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

type Source added in v0.3.0

type Source = stdslog.Source

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

type StdLogger added in v0.3.0

type StdLogger = stdslog.Logger

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

type SubscribeOptions added in v0.2.0

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

SubscribeOptions 订阅选项。

type SubscriberStats added in v0.2.0

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

func GetSubscriberStats(id int64) (SubscriberStats, bool)

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

func ListSubscriberStats added in v0.2.0

func ListSubscriberStats() []SubscriberStats

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

type SubscriptionBackpressurePolicy added in v0.2.0

type SubscriptionBackpressurePolicy string

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

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

type SubscriptionEvent added in v0.2.0

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

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

type SubscriptionStats added in v0.2.0

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

func GetSubscriptionStats() SubscriptionStats

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

type TextHandler added in v0.3.0

type TextHandler = stdslog.TextHandler

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

func NewTextHandler added in v0.0.2

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

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

type Value added in v0.0.2

type Value = stdslog.Value

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

func AnyValue added in v0.3.0

func AnyValue(v any) Value

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

func BoolValue added in v0.3.0

func BoolValue(v bool) Value

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

func DurationValue added in v0.3.0

func DurationValue(v time.Duration) Value

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

func Float64Value added in v0.3.0

func Float64Value(v float64) Value

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

func GroupValue added in v0.0.16

func GroupValue(args ...Attr) Value

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

func Int64Value added in v0.3.0

func Int64Value(v int64) Value

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

func IntValue added in v0.3.0

func IntValue(v int) Value

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

func StringValue added in v0.0.2

func StringValue(value string) Value

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

func TimeValue added in v0.3.0

func TimeValue(v time.Time) Value

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

func Uint64Value added in v0.3.0

func Uint64Value(v uint64) Value

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

Directories

Path Synopsis
dlp
internal

Jump to

Keyboard shortcuts

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