闲社服务运行正常AI智能体自动化平台
g

结构化日志扩展

技能标识:golang-samber-slog

Structured logging extensions for Golang using samber/slog-**** packages — multi-handler pipelines (slog-multi), log sampling (slog-sampling), attribute formatting (slog-formatter), HTTP middleware (slog-fiber, slog-gin, slog-chi, slog-echo), and backend routing (slog-datadog, slog-sentry, slog-loki, slog-syslog, slog-logstash, slog-graylog...). Apply when using or adopting slog, or when the codebase already imports any github.com/samber/slog-* package.

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 1.0.3
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

结构化日志扩展

角色定位: 你是一位 Go 语言日志架构师。你设计的日志管道中,每条记录都能流经正确的处理器——采样环节提前丢弃噪声,格式化器在记录离开进程前剥离 PII,路由器将错误发送至 Sentry,而信息日志则流向 Loki。

samber/slog-\\\\ — Go 结构化日志管道

20+ 个可组合的 slog.Handler 包,适用于 Go 1.21+。包含三个核心管道库,以及 HTTP 中间件和后端接收器,均实现了标准 slog.Handler 接口。

官方资源:

本技能并非详尽无遗。更多信息请参考库文档和代码示例。Context7 可作为发现平台提供帮助。

管道模型

每个 samber/slog 管道都遵循一个规范的顺序。记录从左向右流动——首先放置采样环节以提前丢弃记录,避免在永远不会到达接收器的记录上浪费 CPU。

记录 → [采样] → [管道:追踪/PII] → [路由器] → [接收器]

顺序很重要:在格式化之前采样可以节省 CPU。在路由之前格式化可以确保所有接收器都能获得干净的属性。颠倒顺序会在将被丢弃的记录上浪费工作。

核心库

库用途关键构造函数
slog-multi处理器组合Fanout, Router, FirstMatch, Failover, Pool, Pipe
slog-sampling
吞吐量控制 | UniformSamplingOption, ThresholdSamplingOption, AbsoluteSamplingOption, CustomSamplingOption | | slog-formatter | 属性转换 | PIIFormatter, ErrorFormatter, FormatByType[T], FormatByKey, FlattenFormatterMiddleware |

slog-multi — 处理器组合

六种组合模式,每种满足不同的路由需求:

模式行为延迟影响
Fanout(handlers...)顺序广播给所有处理器所有处理器延迟之和
Router().Add(h, predicate).Handler()
路由给所有匹配的处理器 | 匹配处理器延迟之和 |
| Router().Add(...).FirstMatch().Handler() | 仅路由给第一个匹配的处理器 | 单个处理器延迟 |
| Failover()(handlers...) | 顺序尝试直到一个成功 | 主处理器延迟(正常路径) |
| Pool()(handlers...) | 并发广播给所有处理器 | 所有处理器延迟的最大值 |
| Pipe(middlewares...).Handler(sink) | 接收器前的中间件链 | 中间件开销 + 接收器 |

go
// 将错误路由到 Sentry,所有日志输出到标准输出
logger := slog.New(
slogmulti.Router().
Add(sentryHandler, slogmulti.LevelIs(slog.LevelError)).
Add(slog.NewJSONHandler(os.Stdout, nil)).
Handler(),
)

内置谓词:LevelIs, LevelIsNot, MessageIs, MessageIsNot, MessageContains, MessageNotContains, AttrValueIs, AttrKindIs。

每种模式的完整代码示例,请参见 管道模式。

slog-sampling — 吞吐量控制

策略行为最佳适用场景
Uniform丢弃所有记录的固定百分比开发/预发布环境降噪
Threshold
每个时间间隔内记录前 N 条,然后按速率 R 采样 | 生产环境 — 保留初始可见性 | | Absolute | 全局限制每个时间间隔内最多 N 条记录 | 硬性成本控制 | | Custom | 用户函数返回每条记录的采样率 | 基于级别或时间的规则 |

采样必须是管道中最外层的处理器——将其放在格式化之后会在将被丢弃的记录上浪费 CPU。

go
// Threshold:每 5 秒记录前 10 条,然后记录 10% — 错误始终通过 Router 传递
logger := slog.New(
slogmulti.
Pipe(slogsampling.ThresholdSamplingOption{
Tick: 5 * time.Second, Threshold: 10, Rate: 0.1,
}.NewMiddleware()).
Handler(innerHandler),
)

匹配器用于对相似记录进行分组去重:MatchByLevel(), MatchByMessage(), MatchByLevelAndMessage() (默认), MatchBySource(), MatchByAttribute(groups, key)。

策略比较和配置详情,请参见 采样策略。

slog-formatter — 属性转换

作为 Pipe 中间件应用,以便所有下游处理器都能接收到干净的属性。

go
logger := slog.New(
slogmulti.Pipe(slogformatter.NewFormatterMiddleware(
slogformatter.PIIFormatter(user), // 掩码 PII 字段
slogformatter.ErrorFormatter(error), // 结构化错误信息
slogformatter.IPAddressFormatter(client), // 掩码 IP 地址
)).Handler(slog.NewJSONHandler(os.Stdout, nil)),
)

关键格式化器:PIIFormatter, ErrorFormatter, TimeFormatter, UnixTimestampFormatter, IPAddressFormatter, HTTPRequestFormatter, HTTPResponseFormatter。通用格式化器:FormatByType[T], FormatByKey, FormatByKind, FormatByGroup, FormatByGroupKey。使用 FlattenFormatterMiddleware 展平嵌套属性。

HTTP 中间件

跨框架的一致模式:router.Use(slogXXX.New(logger))。

可用中间件:slog-gin, slog-echo, slog-fiber, slog-chi, slog-http (net/http)。

所有中间件共享一个 Config 结构体,包含:DefaultLevel, ClientErrorLevel, ServerErrorLevel, WithRequestBody, WithResponseBody, WithUserAgent, WithRequestID, WithTraceID, WithSpanID, Filters。

go
// Gin 带过滤器 — 跳过健康检查
router.Use(sloggin.NewWithConfig(logger, sloggin.Config{
DefaultLevel: slog.LevelInfo,
ClientErrorLevel: slog.LevelWarn,
ServerErrorLevel: slog.LevelError,
WithRequestBody: true,
Filters: []sloggin.Filter{
sloggin.IgnorePath(/health, /metrics),
},
}))

特定框架的设置,请参见 HTTP 中间件。

后端接收器

所有接收器都遵循 Option{}.NewXxxHandler() 构造函数模式。

类别包
云服务slog-datadog, slog-sentry, slog-loki, slog-graylog
消息队列
slog-kafka, slog-fluentd, slog-logstash, slog-nats |
| 通知 | slog-slack, slog-telegram, slog-webhook |
| 存储 | slog-parquet |
| 桥接 | slog-zap, slog-zerolog, slog-logrus |

批处理处理器需要优雅关闭 — slog-datadog, slog-loki, slog-kafka 和 slog-parquet 会在内部缓冲记录。必须在关闭时刷新(例如,Datadog 的 handler.Stop(ctx),Loki 的 lokiClient.Stop(),Kafka 的 writer.Close()),否则缓冲的日志将丢失。

配置示例和关闭模式,请参见 后端处理器。

常见错误

错误失败原因修复方法
格式化后采样浪费 CPU 格式化将被丢弃的记录将采样作为最外层处理器
Fanout 到多个同步处理器
阻塞调用方 — 延迟是所有处理器之和 | 使用 Pool() 进行并发分发 | | 缺少对批处理处理器的关闭刷新 | 关闭时缓冲日志丢失 | defer handler.Stop(ctx) (Datadog), defer lokiClient.Stop() (Loki), defer writer.Close() (Kafka) | | 路由器没有默认/兜底处理器 | 不匹配的记录被静默丢弃 | 添加一个没有谓词的处理器作为兜底 | | 在没有 HTTP 中间件的情况下使用 AttrFromContext | 上下文中没有可

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 golang-samber-slog-1776056232 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 golang-samber-slog-1776056232 技能

通过命令行安装

skillhub install golang-samber-slog-1776056232

下载

⬇ 下载 golang-samber-slog v1.0.3(免费)

文件大小: 19.27 KB | 发布时间: 2026-4-14 11:19

v1.0.3 最新 2026-4-14 11:19
- Bumped skill version to 1.0.3 in metadata.
- Added allowed tool: AskUserQuestion.
- Fixed minor typo ("more informations" → "more information") in documentation.
- No functional or behavioral changes—documentation and metadata update only.
返回顶部