Rust in Everything
基于 tracing 0.1.44

设计取舍

前面各部分按 crate、按模块读,每一页讲清一个机制。这一部分换个角度:把散在各页里的取舍收拢起来,按「选了什么、换来了什么、付出了什么、代价由谁来补」排好。这里不重讲机制,每条都链回讲过它的那一页;数字都来自那些页的实验,出处都是 tracing 自己的源码、文档、PR 和 issue。

  1. 取舍汇总:七个决定。tracing-core 单独成 crate 并一直停在 0.1;元数据和字段名在编译期写死;每个调用点缓存一个 Interest、全局再存一个 MAX_LEVEL;span 的数据全交给 subscriber;一个 Registry 加多个 Layer,靠类型嵌套组合;全局默认只能设一次;进入 span 靠守卫的 Drop 退出。
flowchart TB
  core["门面与核心分开"] --> meta["元数据在编译期"]
  meta --> cache["Interest 与 MAX_LEVEL"]
  cache --> spans["span 数据归 subscriber"]
  spans --> layers["Registry 加 Layer"]
  layers --> glob["全局默认只设一次"]
  glob --> guard["enter 用守卫"]

💬 关联讨论

发起讨论
加载中...