安装 SDK
在应用目录中安装这两个包。保留应用原有的 React 和 React Native 依赖:创建项目 SDK 密钥
为应用提供一个仅限该项目、只能写入的 SDK 密钥。Expo 会把所有EXPO_PUBLIC_* 值打包进应用。切勿在该变量中放入账号凭据或服务端凭据。
CLI v0.1.32 或更高版本可以为现有项目创建密钥,但不会创建新项目。查找项目 ID:
--abandon-retry。
不要把密钥文件纳入源码管理。不要使用为 CLI 授权的账号凭据。在本地 Expo 开发中,把密钥放在应用根目录下一个已被忽略的 .env.local 文件中:
process.env.EXPO_PUBLIC_LOGBREW_CLIENT_KEY 的直接引用。修改该值后,完全重新加载应用。构建时配置请参阅 Expo 环境变量。纯 React Native 应用则通过自己的配置加载密钥。
创建客户端
把这段接入代码放在应用启动时加载的一个模块中。不要在每次渲染时创建客户端。把服务、环境和版本放进context:
stopAppStateListener()。
使用原生队列时,一个密钥只能被一个活跃客户端使用。同一密钥的第二个客户端会以 configuration_error 失败。这也是只创建一次客户端的另一个原因。
发送并查找测试日志
从一个仅在开发环境中使用的测试入口调用一次verifyLogBrewSetup()。等待结果,并处理被拒绝的 Promise。不要打印密钥或信号批次。
结果为 2xx 且 batches 大于 0,表示 LogBrew 已接受该批次。空的 flush 会返回 204,尝试次数和批次数都为 0,因为自动投递可能已经先把信号发出。无论哪种情况,都用 CLI 读取已保存的日志:
RecordingTransport.alwaysAccept() 仅用于本地测试。它返回模拟的 202,不发送任何请求。
离线与重启后的投递
在运行中的应用里读取client.deliveryHealth().storage:
persistent:客户端使用原生队列。应用重启后,待投递的信号会重新加载。memory:JavaScript 运行时重启后,待投递的信号会丢失。
persistentQueue: "auto" 会在应用二进制包含 LogBrew 原生模块时使用原生队列。Expo Go 和较旧的二进制使用内存队列。仅更新 JavaScript 无法添加原生模块。
如果生产环境中的应用需要在重启后继续投递,设置 persistentQueue: "required"。这样,缺少原生队列时,创建客户端会以 configuration_error 失败。带上原生模块重新构建应用。只有在你确实需要内存队列时,才使用 persistentQueue: "disabled"。
原生队列最多容纳 1,000 个信号和 4 MiB 信号数据。客户端上更小的限制同样适用。原生队列中的信号在重启后保留各自的事件 ID。
投递遵循“至少一次”语义,因此重试可能把同一个信号发送两次。如果事件 ID 和内容与 LogBrew 已接受的某个信号一致,LogBrew 不会再次存储它。后台 flush 只是一次尝试,不能证明已经送达。测试离线采集和应用重启,然后在项目中找到已保存的信号。
读取投递状态
client.deliveryHealth() 返回队列和投递状态,不包含信号内容。先读取以下字段:
选择日志内容
每条消息都要简短、具体。描述应用中发生的结果,例如请求失败或已安排重试。不要包含姓名、电子邮件地址、访问令牌、表单值或请求体。 使用与日志内容相符的严重程度:info(信息)、warning(警告)、error(错误)或 critical(严重)。保持服务、环境和版本一致,方便查找相关记录。
npx react-native log-ios 和 npx react-native log-android 显示的是本地设备日志,不会查询 LogBrew。请参阅 React Native 原生调试。
从失败的检查中恢复
flush() 失败时,返回的 Promise 会以 SDK 错误码被拒绝。不要在错误报告中包含密钥和信号内容。
更多检查请参阅故障排除。
在发布包中保留 Expo Debug ID
通过 LogBrew 创建 Expo Metro 配置。这样,运行时包会获得与其 Source Map 相同的 Debug ID:withLogBrewMetroConfig() 包装最终的 Metro 配置。不要在 Expo 中使用这个包装函数。否则,生产构建会停止,并显示一条指向 getLogBrewExpoConfig() 的消息。