高性能、功能丰富的 Go 结构化日志库,基于 Go 1.23+ 官方 log/slog 扩展。
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("Hello slog!")
// 结构化字段
logger.Info("User logged in",
"user_id", 123,
"action", "login",
)
// 格式化日志
logger.Infof("Process took %d ms", 100)
}
// 全局级别设置
slog.SetLevelTrace() // 最详细
slog.SetLevelDebug()
slog.SetLevelInfo() // 默认
slog.SetLevelWarn()
slog.SetLevelError()
// 动态设置
slog.SetLevel("debug")
slog.SetLevel(slog.LevelDebug)
// 默认输出到 stdout
logger := slog.NewLogger(os.Stdout, false, false)
// 自定义配置
cfg := slog.DefaultConfig()
cfg.SetEnableText(true)
cfg.SetEnableJSON(true)
logger := slog.NewLoggerWithConfig(os.Stdout, cfg)
logger := slog.NewLoggerBuilder().
WithModule("order").
WithGroup("api").
WithAttrs(slog.String("req_id", "r-1")).
EnableJSON(true).
Build()
// 创建带模块名的 logger
userLogger := slog.Default("user")
authLogger := slog.Default("auth")
// 使用分组
logger := slog.WithGroup("api")
logger.Info("Request", "method", "GET", "path", "/users")
// 启用 DLP
slog.EnableDLPLogger()
// 结构体标签脱敏
type User struct {
Name string `dlp:"chinese_name"`
Phone string `dlp:"mobile_phone"`
Email string `dlp:"email"`
Password string `dlp:"password"`
IDCard string `dlp:"id_card"`
}
user := &User{
Name: "张三",
Phone: "13812345678",
Email: "zhangsan@example.com",
}
// 自动脱敏输出
logger.Info("user", "data", user)
// 输出: 张三 → 张*, 13812345678 → 138****5678
支持的脱敏类型:中文姓名、身份证、手机号、邮箱、银行卡、地址、密码、车牌、IP、JWT、URL
writer := slog.NewWriter("logs/app.log").
SetMaxSize(100). // 单文件最大 100MB
SetMaxAge(7). // 保留 7 天
SetMaxBackups(10). // 最多 10 个备份
SetCompress(true) // 压缩旧文件
logger := slog.NewLogger(writer, false, false)
// 获取当前状态
snapshot := slog.GetRuntimeSnapshot()
// 动态调整
slog.ApplyRuntimeOption("level", "warn")
slog.ApplyRuntimeOption("json", "on")
slog.ApplyRuntimeOption("dlp", "on")
// 订阅日志
ch, cancel := slog.Subscribe(1000)
defer cancel()
// 异步处理
go func() {
for record := range ch {
fmt.Printf("[%s] %s\n", record.Level, record.Message)
}
}()
import "github.com/darkit/slog/modules"
// 使用工厂创建带模块的 logger
logger := slog.NewLoggerBuilder().
UseLogfmt(). // logfmt 输出 (Loki/Vector)
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()
内置模块:
log/slog 标准库)log/slog 接口约定slog.Handler 实现基于 Go 官方 log/slog 包扩展开发。