浏览 SDKs · Flutter
SDKsFlutter

日志

配置 OpenIM Flutter SDK 日志,写入应用诊断信息并上传日志。

复制

开发和预发布环境可以输出较详细的 SDK 日志;生产环境应降低级别并关闭不必要的标准输出。不要记录 Token、完整消息正文、原始文件 URL 或用户隐私字段。

初始化日志配置

Flutter SDK 在 initSDK() 时配置日志,而不是在 login() 时配置。

import 'dart:io';

final platformID = Platform.isIOS
    ? IMPlatform.ios
    : IMPlatform.android;

await OpenIM.iMManager.initSDK(
  platformID: platformID,
  apiAddr: apiAddr,
  wsAddr: wsAddr,
  dataDir: dataDir,
  listener: connectListener,
  logLevel: 5,
  isLogStandardOutput: true,
  logFilePath: logFilePath,
);

示例面向 Flutter 的 Android 与 iOS 运行环境:Android 使用 IMPlatform.android,iOS 使用 IMPlatform.ios。不要把 Android 平台值硬编码到 iOS 构建中。

参数说明
logLevelSDK 日志级别数字;固定 SDK 默认值为 6,应按部署环境选择。
isLogStandardOutput是否输出到平台标准日志;开发诊断时开启。
logFilePath可选日志文件路径;应放在应用可写目录。

生产环境建议关闭标准输出并只保留必要级别。日志目录受平台权限与生命周期约束,不要硬编码其他应用或系统目录。

写入与上传日志

await OpenIM.iMManager.logs(
  logLevel: 5,
  file: 'chat_repository.dart',
  line: 120,
  msgs: 'load conversation page failed',
  err: error.toString(),
  keyAndValues: ['conversationID', conversationID],
);

需要由用户主动提交诊断日志时,可以监听上传进度并调用 uploadLogs()

OpenIM.iMManager.setUploadLogsListener(
  OnUploadLogsListener(
    onUploadProgress: (current, size) {
      updateLogUploadProgress(current, size);
    },
  ),
);

await OpenIM.iMManager.uploadLogs(ex: 'user initiated diagnostics');

setUploadLogsListener() 保存的是 manager 级 singleton listener,后一次设置会覆盖前一次。固定 SDK 没有 remove 或 unset API,因此应在应用统一的 SDK 绑定层设置一次,并由该层把进度分发给当前界面;不要在每个页面或组件重复设置。退出登录或切换账号时,清空应用层订阅和上一账号的上传状态,避免进度或错误显示到新账号界面。

上传前应向用户说明收集范围,并按隐私与合规要求处理日志。