日志
配置 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.Fatal 或 LogLevel.Error,不要依赖 Panic。
日志级别列表
| 场景 | 建议配置 | 说明 |
|---|---|---|
| 本地开发 | LogLevel.Debug,isLogStandardOutput: true | 在浏览器控制台查看 SDK 调用细节。 |
| 联调或预发布 | 根据问题临时使用更详细的级别 | 配合用户 ID、会话 ID、错误码和 OpenIMServer 日志定位问题。 |
| 较少输出 | 使用 Warn 或 Error,关闭控制台输出 | 仅输出对应级别的 SDK 日志。 |
如何配置日志级别
创建 SDK 实例后,在 login() 参数中设置日志选项。浏览器端登录仍需要传入 userID、token、Platform.Web、apiAddr 和 wsAddr。
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,
});参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
logLevel | LogLevel | 否 | 控制 SDK 运行日志详细程度。 |
isLogStandardOutput | boolean | 否 | 是否把 SDK 日志输出到浏览器控制台。 |
errCode、errMsg 是响应中的诊断字段,不是 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、conversationID、clientMsgID 等业务标识。如果一个业务流程包含多次 SDK 调用,应为每次调用生成独立的 operationID,另用业务侧 trace ID 串联整个流程。
相关页面
这个页面有帮助吗?