mcpField
E
effect-time-tracing-logging

effect-time-tracing-logging

github.com/mepuka开发539 次安装44 周前更新
代码仓库

关于 effect-time-tracing-logging

面向 Effect 使用者的编码技能,涵盖时间操作、超时、追踪 Span 和结构化日志,并建议实现前查阅本地 Effect 源码与测试。

主要功能

  1. 01读取当前时间并执行休眠
  2. 02为操作设置超时
  3. 03用追踪 Span 包装操作
  4. 04按多个级别写日志
  5. 05搜索本地 Effect 源码与测试

适用场景

  1. 01为 Effect 操作添加截止时间
  2. 02测量关键区段的延迟
  3. 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
工作流
  1. 确定所需的时间或日志 API(例如 Clock、Duration、withSpan)
  2. 在 docs/effect-source/effect/src/ 中搜索其实现
  3. 研究类型和基于时间的模式
  4. 查看测试文件中的用法示例
  5. 根据实际实现编写代码

实际源码 > 文档 > 假设

参考资料

评论

支持 Markdown