浏览 SDKs · WASM
SDKsWASM

日志

配置 WASM SDK 日志级别,并使用 operationID 串联客户端与 OpenIMServer 调用日志。

复制

WASM SDK 的日志主要用于定位浏览器端登录和业务 API 调用问题。开发和预发布环境可以输出更详细的 SDK 日志;生产环境应只保留必要的错误和追踪字段,避免记录 Token、消息正文、文件 URL 等敏感数据。

日志链路通常包含 SDK 登录参数中的日志配置、单次调用的 operationID、SDK 响应中的诊断字段,以及应用自己的结构化日志。

日志级别

浏览器 SDK 的日志选项在 login() 时通过 InitAndLoginConfig 传入。logLevel 使用 LogLevel 枚举;从最详细到最简略依次为 Verbose(6)、Debug(5)、Info(4)、Warn(3)、Error(2)、Fatal(1)和 Panic(0)。开发诊断可使用 LogLevel.Debug,生产环境通常只保留警告或错误级别。

当前浏览器 SDK 的登录包装层使用 params.logLevel || 5 写入配置。因为 LogLevel.Panic 的数值是 0,传入后会被当成假值并回退为 Debug;需要减少日志输出时,应使用 LogLevel.FatalLogLevel.Error,不要依赖 Panic

生产环境不建议始终开启最详细日志。更稳妥的方式是按环境、灰度开关或用户主动提交诊断信息时临时提高日志级别。

日志级别列表

场景建议配置说明
本地开发LogLevel.DebugisLogStandardOutput: true在浏览器控制台查看 SDK 调用细节。
联调或预发布根据问题临时使用更详细的级别配合用户 ID、会话 ID、错误码和 OpenIMServer 日志定位问题。
生产默认使用 WarnError,关闭不必要的控制台输出避免噪声和敏感信息泄露,只保留应用层结构化错误日志。
用户诊断模式临时打开更详细日志,并提示收集范围在产品界面说明会收集哪些字段,并遵守隐私与合规要求。

如何配置日志级别

创建 SDK 实例后,在 login() 参数中设置日志选项。浏览器端登录仍需要传入 userIDtokenPlatform.WebapiAddrwsAddr

import { getSDK, LogLevel, Platform } from '@openim/wasm-client-sdk';

const openimsdk = getSDK({
  coreWasmPath: '/openIM.wasm',
  sqlWasmPath: '/sql-wasm.wasm',
});

await openimsdk.login({
  userID,
  token,
  platformID: Platform.Web,
  apiAddr,
  wsAddr,
  logLevel: LogLevel.Debug,
  isLogStandardOutput: true,
});

参数说明

参数类型是否必填说明
logLevelLogLevel控制 SDK 运行日志详细程度。
isLogStandardOutputboolean是否把 SDK 日志输出到浏览器控制台;开发和临时诊断时使用。

errCodeerrMsg 是响应中的诊断字段,不是 login() 的日志配置参数。

使用 operationID 定位一次调用

operationID 是单次 SDK 调用的链路标识。WASM SDK 的多数方法都把它作为最后一个可选参数;不传时,JavaScript 包装层会为本次调用自动生成 UUID,并把同一个值传给 SDK 核心。可借助响应中的 operationID 将客户端日志与 OpenIMServer 日志对应起来,用于确认某条请求经过了哪些处理环节。

const operationID = crypto.randomUUID();

try {
  const response = await openimsdk.getConversationListSplit(
    { offset: 0, count: 50 },
    operationID,
  );

  appLogger.info('openim_api_success', {
    operationID: response.operationID,
    action: 'get_conversation_page',
  });
} catch (error) {
  appLogger.error('openim_api_failed', {
    operationID,
    action: 'get_conversation_page',
    error,
  });
  throw error;
}

日常调用可以省略 operationID,由 SDK 自动生成。只有业务需要把一次具体调用与 OpenIMServer 日志精确对应时,才需要显式生成并传入;每次调用使用新的值,不要让多个无关请求共享同一个 operationID

operationID 不是用户身份、权限凭据、会话 ID 或业务幂等键,不能用来替代 Token、conversationIDclientMsgID 等业务标识。如果一个业务流程包含多次 SDK 调用,应为每次调用生成独立的 operationID,另用业务侧 trace ID 串联整个流程。

记录业务上下文

记录日志时保留当前路由、业务动作名称、operationIDerrCodeerrMsg 和必要的目标标识。不要把 Token、完整消息正文、原始文件地址或用户隐私字段写入前端日志。

相关页面