ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

evlog CLI 可观测性评分实战:用 evlog map 揪出应用里的暗区日志入口

evlog CLI 可观测性评分实战:用 evlog map 揪出应用里的暗区日志入口 【免费下载链接】evlogDigging through logs is not observability. Its hope — wide events, structured errors, TypeScript-first, every runtime.项目地址https://gitcode.com/gh_mirrors/ev/evlog点击查看免费下载为什么需要 evlog 可观测性评分翻日志堆永远不是可观测性——那只是希望。evlog 是一个 TypeScript 优先的日志库主打宽事件wide events、结构化错误和全运行时支持。它的 CLI 自带一个很实用的命令evlog map一次静态扫描就能给项目的日志入口打出一个 0–100 分的可观测性评分并点名最需要修的暗区入口dark entry points既没有宽事件、也没有上下文的处理器。整个过程不跑业务、不发流量、不改生产代码——读源码、AST 分析、出报告三分钟完成一次体检。30 秒跑出第一份评分报告在任意受支持的框架项目里执行一条命令即可CLI 要求 Node 22无需安装依赖npx evlog map --no-write当前evlog map已适配 7 个框架Nuxt、Nitro、Next.js App Router、TanStack Start、Hono、Express、Fastify。运行在应用的 package 目录里而不是空的 monorepo 根目录。扫描原理可以看源码入口在 map.ts扫描、打分、敏感度分类分别位于 scan.ts、score.ts 和 sensitivity.ts。读懂 evlog map 评分报告四个区块各回答一个问题报告从上到下依次是四块每块回答一个不同的问题1. 总分与评级大号数字是满分 100 的全局评分——所有入口的加权平均其中钱和认证相关路由权重 ×2页面 ×0.5。下方的单词是评级分数评级90–100excellent70–89good50–69needs work0–49at risk右侧的积木条是每个入口的分数分布最差的在左、最好的在右右边一片高块、左边零星矮块说明是个健康应用加几个盲区一整排矮块则意味着应用几乎没有埋点。2. COVERAGE 覆盖分组按你思考应用的方式分组API handlers、Pages、Middleware jobs、Money auth。其中 Money auth 是单独一行——那是漏一个事件最贵的地方低于全局分时会带 ⚠ 标记。3. FIX FIRST 优先修复最多 3 个这是整份报告的精华按敏感优先、分数最差优先选出最多三个入口每个都给出方法、路径、敏感标记$钱 /A认证 /PII、一句话问题描述以及文件名、行号和对应规则。4. THEN 其余缺口剩下有缺口的入口按修复动作批量归组比如add useLogger log.set to /api/... 4表示有 4 个入口需要同样的两行修改一遍扫过去即可。末尾两行也别漏看✓ Already solid表扬已经到位的入口▲ 76 → 86 by fixing the 3 above告诉你只修完 FIX FIRST 那三个分数就能从 76 升到 86——这就是为什么要从那里开始。官方文档中的完整报告示例2.map.md。揪出暗区入口--all 矩阵与单文件检查想看全部入口的检查矩阵加一个--allnpx evlog map --all每个入口一行最差排最前一行一列对应每条规则宽事件、上下文、审计、结构化错误等。点 ● 表示覆盖或缺口· 表示不适用。定位到某个入口后传路由或文件路径看它的完整解释npx evlog map server/api/auth/login.post.ts单文件报告会展示四样东西新手尤其要注意前两条WHY THIS FILE IS SCANNED——CLI 认为这个文件是什么。判错了下面的结论就全错这是第一眼要核的地方FLAGGED SENSITIVE BECAUSE——敏感分类的精确理由误报一行就能看出来SUGGESTED SHAPE——按你的框架习惯生成的修复形状例如/api/auth/login会建议auth.login这个审计动作而不是占位符修复预期▲ fixing this entry point: 75 → 100报告渲染逻辑在 report.tsGitHub Actions 注解格式在 formats.ts。评分是怎么算出来的规则权重与敏感分类每个入口从 100 分开始每失败一条**要求requirement**扣对应权重规则权重wide-event 宽事件40audit 审计日志25structured-errors 结构化错误20page-error-handling 页面错误处理20context 上下文15error-handling 错误处理15权重故意加起来超过 100全部失败的入口直接落到 0 分而修复优先级始终有意义宽事件 40 分压过任何两条小规则的组合。敏感路由为什么 ×2 加权敏感度分类器从两处取证据导入的依赖如stripe、better-auth和路径关键词checkout、login等整词匹配/api/authors不会被误判为认证路由。被标记钱/认证入口会追加一条audit要求并双倍计入全局平均。判断规则与权重详解见 4.scoring.md。把评分变成 CI 门禁--min-score 与 --baseline 棘轮评分最大的价值不是看一次而是持续不回归。三个标志位组合起来就是一套 CI 门禁npx evlog map --min-score 80 --baseline--min-score n全局分低于 n 时退出码为 1像一条真实测试一样拦住 PR--baseline与提交进仓库的evlog.map.json对比发现已存在入口的要求或分数回归就失败——就像快照测试静默删掉一个log.set的 refactor 无法溜过 review棘轮思路老应用从 34 分起步但从不回归比一个新应用 80 分然后一年滑到 50 更强注意两点每次运行会写入evlog.map.json用--no-write跳过规则集还在演进若用它做门禁请锁定 CLI 版本否则一次发版可能改变你没动过的代码的判定。CI 细节见 5.ci.md。误判怎么办一行注释关掉单条检查不同意某条判定时在代码里加一行注释即可检查立即变为n/a不扣分、不挡门禁理由会被记录报告也会统计项目里禁用了多少检查——高分永远不会掩盖什么都不打日志的应用// evlog-map-disable-next-line wide-event, context -- liveness probe, deliberately silent export default defineEventHandler(() ({ ok: true }))完整禁用语法见 3.rules.md。评分的边界高分≠可观测性完美静态分析有天花板知道它才能信任这个分数读代码不读流量入口可以打 100 分但运行时附带的上下文如果是错的事件照样没用。分数只说明形状在只追踪一层导入通过三层自建抽象传下来的 logger 可能不被识别当前仅 7 个框架有适配器其他运行时暂不扫描敏感分类是启发式看导入和路径用evlog map file查看理由误判一眼可见入口数为 0 时当前会显示 100 分——那是空结果不是全部埋好先看框架和入口数再解读一句话原则看dark和Money auth而不是只看头条数字——下一次故障就藏在这些地方。边界说明原文见 9.observability-score.md。上手路径小结npx evlog map --no-write出第一份评分读 FIX FIRST逐条用npx evlog map file看建议形状修复后重跑确认分数上涨提交evlog.map.json用--baseline上棘轮给 CI 加--min-score地板分锁定 CLI 版本evlog 的 CLI 全部命令init / map / doctor / logs / agents概览见 0.overview.md。第一次扫描分数难看很正常——这个数字不是用来跟别人比而是用来跟自己比让暗区入口一个个变亮就是这套可观测性评分的全部意义。赞分享【免费下载链接】evlogDigging through logs is not observability. Its hope — wide events, structured errors, TypeScript-first, every runtime.项目地址https://gitcode.com/gh_mirrors/ev/evlog点击查看免费下载相关推荐Activepieces 日志模式审查与 evlog 结构化日志改造实战指南Activepieces 日志模式审查与 evlog 结构化日志改造实战指南 本篇指南以 Activepieces 仓库中的日志审查技能文档为核心系统讲解如何工作流自动化低代码AI 应用人工智能AI AgentMCP 服务后端前端evlog独立TypeScript使用教程脚本、Worker、CLI的完整日志方案无需HTTP框架evlog独立TypeScript使用教程脚本、Worker、CLI的完整日志方案无需HTTP框架 evlog 是一个 TypeScript 优先的结构化日evlog × eve agent可观测性每轮对话一条宽事件token与工具调用全透明evlog × eve agent可观测性每轮对话一条宽事件token与工具调用全透明 evlog 是 TypeScript 优先的宽事件Wide Eve创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进