














第一层: 流程观测日志
每个关键处理阶段结束时输出一条规范日志行,字段密集、自包含,基本不需要跨行关联就能看到完整信息的日志,
日志中应包含下面的字段
[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
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。