关于 effect-time-tracing-logging
面向 Effect 使用者的编码技能,涵盖时间操作、超时、追踪 Span 和结构化日志,并建议实现前查阅本地 Effect 源码与测试。
主要功能
- 01读取当前时间并执行休眠
- 02为操作设置超时
- 03用追踪 Span 包装操作
- 04按多个级别写日志
- 05搜索本地 Effect 源码与测试
适用场景
- 01为 Effect 操作添加截止时间
- 02测量关键区段的延迟
- 03通过结构化日志消息排查问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mepuka/ effect-ontology --skill effect-time-tracing-logging安装后在 Claude Code 中输入/effect-time-tracing-logging确认已加载。
详细介绍
时间、追踪与日志
适用场景
- 需要超时、截止时间或休眠
- 想要使用 span 分析延迟,或使用日志进行调试
时间
import { Clock, Duration } from "effect"
const now = yield* Clock.currentTimeMillis
yield* Effect.sleep(Duration.seconds(1))
超时
const guarded = yield* Effect.timeout(task, Duration.seconds(2))
追踪(span 包装模式)
const op = Effect.withSpan("operation")(Effect.succeed(1))
日志
yield* Effect.logInfo("message")
yield* Effect.logDebug("debug")
yield* Effect.logError("error")
实际示例:通过 Layer 设置最低日志级别
import { Effect, Option, Logger, LogLevel, Layer } from "effect"
export const setMinimumLogLevel = (cliLevel: Option.Option<LogLevel.LogLevel>) =>
APP_CONFIG["LOG_LEVEL"].pipe(
Effect.map((envLevel) => Option.zipLeft(cliLevel, envLevel)),
Effect.map(Option.getOrElse(() => LogLevel.Info)),
Effect.map((level) => Logger.minimumLogLevel(level)),
Layer.unwrapEffect
)
指南
- 优先使用
Duration辅助函数,明确时间单位 - 用 span 包裹关键代码段,并附加属性以提供上下文
- 使用结构化日志,避免随意打印到控制台
注意事项
- 混用毫秒数 → 始终使用
Duration - 外部调用没有设置超时 → 操作可能会一直挂起
交叉链接
- 错误与重试:了解超时和竞态
- 并发:了解如何协调基于时间的操作
本地源码参考
关键:实现前先搜索本地 Effect 源码
完整的 Effect 源码位于 docs/effect-source/。编写 Effect 代码前,务必搜索实际实现。
关键源码文件
- Clock:
docs/effect-source/effect/src/Clock.ts - Duration:
docs/effect-source/effect/src/Duration.ts - Effect(withSpan、log):
docs/effect-source/effect/src/Effect.ts - Logger:
docs/effect-source/effect/src/Logger.ts - LogLevel:
docs/effect-source/effect/src/LogLevel.ts
搜索示例
# Find Clock operations
grep -F "currentTimeMillis" docs/effect-source/effect/src/Clock.ts
grep -F "sleep" docs/effect-source/effect/src/Clock.ts
# Study Duration helpers
grep -F "seconds" docs/effect-source/effect/src/Duration.ts
grep -F "millis" docs/effect-source/effect/src/Duration.ts
grep -F "minutes" docs/effect-source/effect/src/Duration.ts
# Find span and logging patterns
grep -F "withSpan" docs/effect-source/effect/src/Effect.ts
grep -F "logInfo" docs/effect-source/effect/src/Effect.ts
grep -F "logError" docs/effect-source/effect/src/Effect.ts
# Look at Logger implementation
grep -F "minimumLogLevel" docs/effect-source/effect/src/Logger.ts
工作流
- 确定所需的时间或日志 API(例如 Clock、Duration、withSpan)
- 在
docs/effect-source/effect/src/中搜索其实现 - 研究类型和基于时间的模式
- 查看测试文件中的用法示例
- 根据实际实现编写代码
实际源码 > 文档 > 假设
参考资料
- Agent Skills 概览:https://www.anthropic.com/news/skills
- Skills 指南:https://docs.claude.com/en/docs/claude-code/skills
评论
支持 Markdown