---
title: "CLI 遥测"
description: "evlog CLI 会收集哪些关于自身使用情况的数据、如何查看这些数据，以及关闭它的三种方式——DO_NOT_TRACK、EVLOG_TELEMETRY=0，或 evlog telemetry disable。"
canonical_url: "https://evlog.zhcndoc.com/cli/telemetry"
---
# CLI 遥测

> evlog CLI 会收集哪些关于自身使用情况的数据、如何查看这些数据，以及关闭它的三种方式——DO_NOT_TRACK、EVLOG_TELEMETRY=0，或 evlog telemetry disable。

evlog CLI 每次运行都会记录一条匿名的宽事件，因此我们知道人们使用了哪些命令，以及哪些命令出错。它使用的正是 evlog 为你自己的 CLI 提供的同一套[遥测工具包](https://evlog.zhcndoc.com/use-cases/telemetry/overview)，只是把它指向了自身。

<callout color="neutral" icon="i-lucide-info">

本页讲的是 CLI 自身的遥测。如果你正在为**你**正在构建的 CLI 配置仪表，你需要的是[遥测](https://evlog.zhcndoc.com/use-cases/telemetry/overview)。
:::

## `init` 记录了什么

`evlog init` 比其他命令询问更多问题，因此它会记录这些问题的答案，从而让流程优先展示人们实际选择的选项，并舍弃无人选择的选项。

<table>
<thead>
  <tr>
    <th>
      记录内容
    </th>
    
    <th>
      示例
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      框架、开发环境数据出口、采样预设
    </td>
    
    <td>
      <code>
        nuxt
      </code>
      
      、<code>
        fs
      </code>
      
      、<code>
        balanced
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      每个目标位置的一个标志、所选的额外项和增强器
    </td>
    
    <td>
      <code>
        initProdAxiom: true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      计数
    </td>
    
    <td>
      写入的文件数、剩余的手动步骤、doctor 失败次数
    </td>
  </tr>
  
  <tr>
    <td>
      某个提议后面是否有实际内容
    </td>
    
    <td>
      <code>
        initHadRepeatedErrors: true
      </code>
    </td>
  </tr>
</tbody>
</table>

每个字符串都是 CLI 自有目录中的一个 ID，并且在发送前会根据允许列表进行检查；未声明的值会被丢弃，而不会被传输。**绝不会记录你的服务名称**，也不会记录包名称、路径或从源代码中读取的任何内容。最后一行只表示扫描是否发现了某些内容，绝不会表示发现了什么。

## `map` 记录的内容

`evlog map` 记录扫描的形态：分数及其等级、入口点的数量，以及其中有多少是已检测覆盖、部分覆盖、暗黑或豁免的，检测到的是哪个框架，以及 `--min-score` 或 `--baseline` 门禁是否导致运行失败。

<table>
<thead>
  <tr>
    <th>
      记录内容
    </th>
    
    <th>
      示例
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      分数和等级
    </td>
    
    <td>
      <code>
        mapScore: 72
      </code>
      
      , <code>
        mapGrade: good
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      按覆盖情况统计的入口点数量
    </td>
    
    <td>
      <code>
        mapEntryPoints: 34
      </code>
      
      , <code>
        mapDark: 9
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      按类型统计：入口点和暗黑入口点
    </td>
    
    <td>
      <code>
        mapKindPage: 12
      </code>
      
      , <code>
        mapDarkPage: 3
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      按敏感性统计：资金 / 身份验证 / PII 入口点及暗黑入口点
    </td>
    
    <td>
      <code>
        mapSensitiveMoney: 2
      </code>
      
      , <code>
        mapDarkMoney: 1
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      按规则统计：未通过规则的入口点数量，以及豁免该规则的入口点数量
    </td>
    
    <td>
      <code>
        mapFailWideEvent: 6
      </code>
      
      , <code>
        mapSuppressedWideEvent: 2
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      运行了哪个门禁，以及是否失败
    </td>
    
    <td>
      <code>
        mapGate: baseline
      </code>
      
      , <code>
        mapGateFailed: true
      </code>
    </td>
  </tr>
</tbody>
</table>

规则 ID 是 CLI 自有的固定集合，且已经公开。从源代码中读取的所有内容都是计数：**没有路由路径、没有文件名、没有项目名称、没有代码片段**。

类型同样是 CLI 自有的封闭集合；项目中不存在的类型会被省略，而不是以零值发送，这与保持默认值的标志不会被记录的约定相同。对于项目中存在但已完全覆盖的类型，其暗黑计数为 `0`，因此 `mapKindPage: 12, mapDarkPage: 3` 始终表示“12 个页面，其中 3 个是暗黑的”，绝不会表示缺少某个数字。敏感性是启发式分类（依据导入内容和路径术语，参见报告中的 `$` / `A` / `o` 标记），因此按敏感性统计的数量是分类器发现情况的估计值，并非绝对事实。

## 查看收集的内容

```bash [Terminal]
evlog telemetry status
```

该命令会输出遥测是否开启、数据目录的位置，以及完整的披露表：每个字段、其类型及其用途。披露信息由发送事件的代码生成，因此不会与实际通过网络发送的内容产生偏差。

```text [Output]
Telemetry: enabled (preference: enabled)
Data directory: ~/.config/evlog-cli/telemetry
```

## 事件中包含什么

每次运行记录一条事件，其中包含命令名称、耗时、是否成功，以及在失败时的错误码。除此之外，还会记录：Node 版本、操作系统和架构、运行是否在 CI 中以及使用的是哪个提供商、stdout 是否为 TTY，以及是否由 AI 编码代理驱动。

标志会按照你实际传入的内容进行记录。布尔值和数字会保留其值；字符串值会被记录为 `<set>`，而不是记录其内容，除非该标志明确列入允许列表。位置参数完全不会被记录，保留默认值的标志也不会被记录，因此单独运行 `evlog map` 时会发送一个空的 `flags` 对象。机器 ID 是哈希值，在临时 CI 环境中会被完全省略。

<callout color="neutral" icon="i-lucide-lock">

不包含文件路径、源代码、项目名称、路由路径或参数值。

</callout>

## 关闭它

以下任一方式都足够：

```bash [Terminal]
# 持久化偏好
evlog telemetry disable

# 单次运行，或在 shell 配置文件中
EVLOG_TELEMETRY=0 evlog map

# 跨工具标准，在任何地方都受支持
export DO_NOT_TRACK=1
```

`evlog telemetry disable` 还会清除任何已排队但尚未发送的内容。`evlog telemetry enable` 会将其重新开启。

## 在信任之前先检查

要精确查看一次运行将会发送什么，而不实际发送它：

```bash [Terminal]
EVLOG_TELEMETRY_DEBUG=1 evlog map
```

拟发送的负载会打印到标准错误输出。

## 命令

<table>
<thead>
  <tr>
    <th>
      命令
    </th>
    
    <th>
      作用
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        evlog telemetry status
      </code>
    </td>
    
    <td>
      当前状态、数据目录以及完整披露信息
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        evlog telemetry enable
      </code>
    </td>
    
    <td>
      启用匿名使用遥测
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        evlog telemetry disable
      </code>
    </td>
    
    <td>
      禁用并清除未发送的数据
    </td>
  </tr>
</tbody>
</table>
</callout>

---

- [你自己的 CLI 的遥测](https://evlog.zhcndoc.com/use-cases/telemetry/overview)


## Sitemap

See the full [sitemap](https://evlog.zhcndoc.com/sitemap.md) for all pages.
