浏览 SDKs · WASM
平台
SDKsWASM

日志

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

复制

WASM SDK 的日志主要用于定位浏览器端登录和业务 API 调用问题。可以通过日志级别和标准输出选项控制 SDK 输出的详细程度。

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

日志级别

浏览器 SDK 的日志选项在 login() 时通过 LoginParams 传入。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 日志。

如何配置日志级别

创建 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,也不是业务侧用于防止重复处理的 ID,不能用来替代 Token、conversationIDclientMsgID 等业务标识。如果一个业务流程包含多次 SDK 调用,应为每次调用生成独立的 operationID,另用业务侧 trace ID 串联整个流程。

相关页面