惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
D
DataBreaches.Net
C
Check Point Blog
雷峰网
雷峰网
小众软件
小众软件
GbyAI
GbyAI
美团技术团队
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
Apple Machine Learning Research
Apple Machine Learning Research
Y
Y Combinator Blog
Jina AI
Jina AI
爱范儿
爱范儿
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美

博客园 - xiezhengcai

Ai阅读代码的局限性 业务系统缓存加速的五种缓存设计 The CustomResourceDefinition "applications.apps.abc.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes vscode ssh开发无法读取go env配置 deepspeed ray + nccl + 张量并行 训练 ray集群 ray 分布式, 工作节点、reylet、 主节点、GCS ray分布式 nccl & mpi 跨节点通信 cudaMemsetParams 参数详细 cuda 中的内存拷贝 cuda 编程 cuda vllm 参数分类 张量计算流程图标注方法 为什么nn.Linear 的weight 是 (out_features, in_features) torch.view、unsqueeze、reshape、transpose 和 permute PyTorch交叉熵损失函数详解
日志分层设计
xiezhengcai · 2026-03-18 · via 博客园 - xiezhengcai

第一层: 流程观测日志
每个关键处理阶段结束时输出一条规范日志行,字段密集、自包含,基本不需要跨行关联就能看到完整信息的日志,
日志中应包含下面的字段
[pipeline, input, output, config]

其中,如果input是上一个阶段的输出, input 可以为空, pipeline 是该阶段的名称,

该日志从表面描述了该模块输入和输出, 它不包含日志运行过程中外部依赖输入、db输入、缓存的输入。

第二层:诊断日志****
流程观测日志,通常能看到一个表象, 比如说某个阶段的输出不正确,但输入没有问题,但它并不能确定这个输出不正确是什么原因导致的。
所以,诊断日志是需要能体现出定位到问题的原因是啥,以及为啥会走到某个分支代码中去。

在诊断日志中, 也要包含pipeline字段, 通常该字段的值需要从上下文中获取。

它的日志模版中如下:
["pipeline", "event_name", "context"]

其中 event_name 指在做什么, context 指 当时条件是什么, 这一类日志,一般会发生在以下场景: 某个分支条件,产生error的场景,continue的场景, 甚至某些break的场景。它的context通常是一个map结果,该map结构要能描述走到该分支、发生错误的关键参数。 这类的日志有 info error warn debug等级别。

当然,日志除了上面的字段信息, 还有其它相关信息, 比如链路追踪的trace_id , span_id, user_id ,msg 等字段。

异步系统日志:

在并发系统中, 同一个请求可能会有多个线程进行操作, 每个线程的日志需要有特定的字段表示,比如增加goroutine字段,用于标明当前是那个线程分支,
["goroutine"], 当然有的系统也用 "module_name": "index-ad",

然后在主线程上,标明goroutine = main,

日志的结构基本为:

branch->pipeline

其次, 每个日志应该有独立的字段标明,该日志属于流程观测日志 还是诊断日志,
["kind"],取值为 flow 和 diag