V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
jxia
V2EX  ›  Go 编程语言

Go 日志库 gookit/slog v0.6.0 发布: SubLogger 支持和上下文增强

  •  1
     
  •   jxia · 3 天前 · 784 次点击

    易于使用的,轻量级、可配置、可扩展的日志库 gookit/slog 现已发布 v0.6.0 版本!此版本带来了多项新功能和改进,旨在提供更强大的灵活性和更佳的用户体验。

    Github: https://github.com/gookit/slog

    主要更新

    新增子记录器( Sub-logger )

    • 上下文数据继承:新增 SubLogger 功能,允许创建子日志记录器。使用它记录日志会自动继承 SubLogger 的字段( fields )、数据( data )和上下文( ctx ),可以共享一些共用的上下文信息。
    • 高效上下文传递:通过 logger.NewSub() 方法快速创建子记录器,适用于微服务、请求链路追踪等场景。

    例如:在需要共享上下文的场景(如 HTTP 请求处理)中,尝试传递 SubLogger 提升代码简洁性。

    sub := slog.NewSub().
    	KeepData(slog.M{"data1": "data1-value"}).
    	KeepExtra(slog.M{"ext1": "ext1-value"}).
    	KeepFields(slog.M{"field1": "field1-value"}).
    	KeepCtx(context.WithValue(context.Background(), "ctx1", "ctx1-value"))
    defer sub.Release()
    
    callSomeHandler(sub, ...)
    
    sub.Info("some message") // 会共享 sub logger 的 ctx, data, extra 等信息
    

    上下文( Context )增强

    • 快捷上下文方法:为标准日志记录器和扩展日志记录器新增 xxCtx 方法(如 InfoCtx()ErrorCtx()),支持直接传入 context.Context,简化带上下文的日志记录。
    • 上下文数据处理器:新增 CtxKeysProcessor 函数,可从 context.Context 中提取指定键值,自动填充到日志的 dataextrafield 字段中,实现上下文数据的结构化采集。

    使用示例:

    ctx := context.WithValue(context.Background(), "ctx1", "ctx1-value")
    slog.InfoCtx(ctx, "some log message")
    slog.InfofCtx(ctx, "some log %s", "message")
    

    增强的 JSON (Un)marshaler 支持

    为了更好地与 JSON 格式的数据进行交互,我们为 RotateTime, RotateMode, LevelLevelMode 等枚举类型实现了 JSON UnmarshalerMarshaler 接口。

    这意味着在进行 JSON 序列化和反序列化操作时,这些类型可以被更平滑、更直观地处理。可直接从 JSON 配置文件加载/导出日志设置,大幅简化配置管理流程。

    自定义日志级别名称长度和颜色

    为了让日志输出更加个性化和清晰,v0.6.0 版本引入了自定义日志级别名称(如 INFO, DEBUG)的显示长度和颜色的功能。现在,您可以根据自己的偏好调整这些视觉元素,使日志在控制台中更具可读性。

    其他改进与修复

    • 日志记录格式化逻辑优化:我们对内部的日志记录格式化处理进行了一些改进,使其更加高效和健壮。
    • 代码风格统一:对代码库进行了一些调整,以保持一致和清晰的代码风格。
    • 依赖更新与 Bug 修复:更新了一些依赖项,并修复了社区报告的一些小问题。
    • 升级 GitHub Actions 及其他依赖至最新版本,确保构建环境稳定性。

    要了解完整的变更列表,请访问 GitHub Release 页面

    如何升级?

    您可以通过以下 Go 命令轻松更新到最新版本:

    go get github.com/gookit/[email protected]
    
    1 条回复    2025-09-04 14:32:46 +08:00
    spritecn
        1
    spritecn  
       3 天前
    要不是这个库早于官方 slog,真会被认为是碰瓷,java 转过来确实很无缝
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2689 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 155ms · UTC 09:36 · PVG 17:36 · LAX 02:36 · JFK 05:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.