Effect 的 Redacted 怎么防止密钥泄漏到日志?
密钥一旦以普通字符串进了日志就收不回来。这篇讲 Effect 的 Redacted 怎么让打印、字符串化和 JSON 序列化都只显示 redacted,以及它防不住什么。
共 169 篇文章带有这个标签。
密钥一旦以普通字符串进了日志就收不回来。这篇讲 Effect 的 Redacted 怎么让打印、字符串化和 JSON 序列化都只显示 redacted,以及它防不住什么。
effect@4.0.5 里 FiberRef 模块已经不存在,取代它的是 Context.Reference,一个带默认值的服务键。这篇讲它怎么定义、怎么覆盖,以及覆盖在嵌套和 fork 时的行为。
effect 的 References 模块导出了一批内置 Reference,覆盖它们就能局部调整日志级别或关闭 span。这篇给出内置项清单和两个跑过的例子。
直接用 provideService 覆盖 References.CurrentLogAnnotations 是整体替换,不是合并。这篇用跑过的输出说明它和 Effect.annotateLogs 的区别。
Reference 把依赖从类型里藏起来,忘记 provide 时静默用默认值。判断标准只有一条:缺失时有没有安全的默认值。
Effect 4.0.5 里 import 路径已经不再带 unstable,稳定性改由每个导出上的 JSDoc 标签表达。这篇讲怎么看出哪些 API 不稳定,以及怎么管理这类依赖。
失败就重试是个危险的默认。重试的前提是错误是暂时性的,所以顺序必须是先分类,再用 Effect.retry 的 while 谓词只重试值得重试的错误。
底层错误一路冒到最上层,类型会变成基础设施错误的并集。在模块边界用 mapError 翻译并保留 cause,再按「处理方式」决定错误类的数量。
用 ErrorReporter 把「怎么上报」放进环境,用 ignore、severity、attributes 三个标注决定每个错误报不报、多严重、带什么上下文。附最小可运行示例。
defectsOnly 是 cause 级开关,不是逐条过滤。一条 cause 里只要有 defect,里面预期内的失败也会一起上报。
内置的 HTTP 服务端边界会触发 ErrorReporter:500 上报,404 不上报。但 reporter layer 必须出现在最终装配的 layer 里,用 provide 喂给路由会收不到。
ErrorReporter 解析 severity 时,没有标注就一律是 Info,defect 也不例外。这篇给出后果,以及在上报器里按 cause 升级 severity 的最小做法。
catchTag 按 _tag 捕获一种 failure,并让类型里的 E 随之收窄;catchTags 一次处理多种,catch 则会吞掉将来新增的错误。
catch 和 catchTag 碰不到 defect。这篇讲 defect 该由最外层、Effect.exit 或 catchCause 去看,以及 Effect.result 和 Effect.orDie 的区别。
用 Data.TaggedError 给每种 failure 一个带 _tag 的类,让错误可区分、可精确捕获。也讲 Schema.TaggedError 什么时候该换上。
用 ExecutionPlan 把「先试 A,重试两次,不行换 B,最后本地兜底」写成一个值:每步提供不同的 Layer,可配 attempts、schedule、while。
ExecutionPlan 有两个观察入口:计划外的 onEvent 看每次尝试,计划内的 CurrentMetadata 读当前步骤。讲清各自能看到什么,以及什么场景用哪个。
Stream.withExecutionPlan 默认在流失败时照常降级,下游会收到第一家的半截输出加第二家的完整输出。讲清 preventFallbackOnPartialStream 能挡什么、挡不住什么。
forkChild 默认让子 fiber 跟着父一起结束。需要任务跑完不受父影响时,用 forkDetach,或把子 fiber 绑到 Scope 上。讲清各自的归属和该由谁负责生命周期。
在 Effect 里,中断是独立于失败和缺陷的第三种结局,表示有人不再需要结果。讲清它在 Exit 里的表示、为什么不该重试或上报,以及中断为什么是协作式的。