Skip to Content
核心概念诊断和错误报告

诊断、日志和错误报告

每个 Tracelet 应用程序都会记录 SDK 在设备上执行的操作 — 权限、 跟踪状态、传感器可用性和滚动日志。这 tracelet_doctor 包将所有这些变成 一键诊断屏幕复制粘贴错误报告,所以当 有些事情看起来不对劲,您(或您的用户)可以准确地捕捉到发生的情况。

3.3.0 中的新增功能: 医生的 复制 按钮现在捆绑了 一切 (运行状况 + 配置 + 日志 + 远程信息处理)到单个 Markdown 报告中,以及 新的“共享”按钮可让您将其作为 .md 文件下载/通过电子邮件发送。还有一个 日志查看器中的 复制日志 按钮。


30秒版本

添加 tracelet_doctor 作为 开发依赖项 (不是常规依赖项) - 这是一种调试 工具,Flutter 从发布版本中排除开发依赖包:

flutter pub add dev:tracelet_doctor

然后保护 kDebugMode 后面的使用,以便从发布版本中进行树摇动:

import 'package:flutter/foundation.dart' show kDebugMode; import 'package:tracelet_doctor/tracelet_doctor.dart'; // Open the diagnostic screen from a debug menu, button, or shake gesture: if (kDebugMode) { TraceletDoctor.show(context); }

这将打开一个工作表:

  • 警告 - 任何可能损害跟踪的内容(权限被拒绝、省电 模式、激进的 OEM、无显着运动传感器、模拟位置……)。
  • 权限、跟踪状态、电池和 OEM、配置、传感器、数据库。
  • 查看日志 按钮(最后 500 条日志行)。
  • 复制错误报告分享错误报告 按钮位于右上角。

提交错误报告(为您的用户)

当用户报告问题时,帮助他们的最快方法是获取 Tracelet 错误报告。告诉他们:

  1. 打开 Tracelet Doctor 屏幕(无论您将其放置在应用程序中的哪个位置)。
  2. 点击右上角的 共享 图标 (↗) — 或 复制 (⧉)。
  3. 将其粘贴/附加到您的支持频道或 GitHub 问题中,连同 与您自己的任何应用程序日志

该报告是纯 Markdown 形式,如下所示:

# Tracelet Bug Report _Generated by Tracelet Doctor at 2026-06-14T10:22:31Z (UTC)._ ## Health check | Field | Value | |---|---| | Platform | android | | OS version | 14 | | Manufacturer | Xiaomi | | Aggressive OEM | true (rating 5/5) | | Location permission | always | | Power save mode | true | ... **Warnings (2):** - ⚠️ Power Save mode is ON — may throttle background tracking - ⚠️ Device manufacturer may kill background apps ## Active configuration ```json { “geo”:{ “distanceFilter”:10.0,... }, "http": { "url": "《编辑》", "headers": "《编辑》", ... } } ``` ## Telematics events (most recent) | Type | Severity | Lat | Lng | Time | Synced | ... ## Logs (last 500) 2026-06-14T10:21:55Z [INFO] Tracking started (mode: location) 2026-06-14T10:22:03Z [WARN] Location accuracy degraded ...

秘密会自动编辑。 在将配置添加到 报告,其键类似于 URL、标头、参数、键、令牌或 证书被替换为 «redacted»。您的同步 URL、API 密钥和身份验证 标题永远不会出现在粘贴的报告中。 (其他一切 - 距离过滤器, 准确性、功能切换 - 被保留,因为这有助于调试。)


直接使用日志

Doctor 读取的日志与您可以从 API 访问的日志相同。这很方便,如果你 想要构建您自己的诊断屏幕或将日志发送到您的后端。

// Read the most recent log entries. final logs = await Tracelet.getLogs(500); for (final entry in logs) { print('${entry.timestamp} [${entry.level}] ${entry.message}'); } // Wipe stored logs (e.g. after the user files a report). await Tracelet.clearLogs();

每个LogEntry都有idlevelDEBUG/INFO/WARN/ERROR)、message、 和 ISO-8601 NOTTRANS0LATE。日志存储在设备上的 SQLite 数据库中,因此 它们在应用程序重新启动后仍能幸存并捕获后台活动 - 正是 否则无法在调试器中看到的事件。

记录多少由您的 LoggerConfig(日志级别)控制。降低 生产水平保持数据库较小;将其提高到 debug,同时 重现一个问题。


构建您自己的报告

如果您想自己生成报告(例如将其附加到您自己的崩溃中) 记者,或添加您的应用程序版本),直接调用构建器:

import 'package:tracelet_doctor/tracelet_doctor.dart'; final report = await TraceletBugReport.build( appName: 'My App', appVersion: '2.4.1', // e.g. from package_info_plus logLimit: 500, telematicsLimit: 100, ); // Now copy, share, upload, or attach `report` however you like.

您还可以在任何配置映射上重复使用 secret-redaction 帮助器 - 方便 如果您记录自己的配置:

final safe = TraceletBugReport.redactConfig(Tracelet.activeConfig.toMap());

报告内容(备忘单)

部分来源为什么它有帮助
健康检查不翻译迟到权限、OEM/电池、传感器、设备——常见的嫌疑点
警告计算“跟踪在后台停止”的可能原因
主动配置NOTTRANS0LATE(已编辑)确认实际有效的设置 - 包括任何应用的 远程配置 (3.6.10+)
远程信息处理活动不翻译迟到最近的驾驶/碰撞事件 (3.3.0)
日志不翻译迟到SDK 功能的时间表,包括在后台

很高兴知道

  • 隐私第一 — 报告完全在设备上生成。没有什么 除非发送,否则将被上传。秘密在包含之前会被编辑。
  • 未初始化时工作 — 如果 Tracelet 尚未启动,Doctor 显示友好的“未初始化”屏幕而不是崩溃,并且每个报告 部分优雅地降级。
  • 在调试版本中交付 - 许多团队将 TraceletDoctor.show(context) 连接到 摇动手势或隐藏的调试菜单,以便 QA 和支持人员可以在其中获取报告 秒。