设计取舍
前面各部分按 crate、按模块读,每一页讲清一个机制。这一部分换个角度:把散在各页里的取舍收拢起来,按「选了什么、换来了什么、付出了什么、代价由谁来补」排好。这里不重讲机制,每条都链回讲过它的那一页;数字都来自那些页的实验,出处都是 tracing 自己的源码、文档、PR 和 issue。
- 取舍汇总:七个决定。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 用守卫"]
💬 关联讨论
发起讨论加载中...