云通信 IMSDK 日志格式说明

IMSDK 整理关键路径上的日志格式,方便开发者根据指引自查一些常见问题,通用的日志格式如下:

代码语言:javascript
复制
事件|阶段|成功|成功获取到的关键信息
事件|阶段|失败|code=错误码, msg=错误信息
事件|阶段|失败|msg=错误描述

通用格式前面会有文件名行号等信息,可直接搜索事件|过滤关键字,比如登录相关事件可搜索Login|


事件类型

初始化

代码语言:javascript
复制
InitSdk|1-Init|Succ|version=xx, sdkappid=xx, msfappid=xx

可搜索 InitSdk|1-Init 来过滤日志,可查看当前使用版本等信息。

登录

成功的登录流程:

代码语言:javascript
复制
Login|1-Begin|Succ|identifer=xx, sdkappid=xx, ...
Login|2-Ticket|Succ|tinyid=xxx
Login|3-Online|Succ|
Login|4-InitIMCore|Succ|
Login|5-Callback|Succ|call user login succ

步骤

说明

1-Begin

调用入口打印用户传入参数,usersig 不打印

2-Ticket

换票成功打印tinyid和identifier

3-Online

上线成功打印

4-InitIMCore

IMCore初始化成功打印

5-Callback

回调用户打印,用户如果没有设置回调,打印失败

开发者只需要关心 1-Begin5-Callback 即可。

失败示例:

代码语言:javascript
复制
Login|1-Begin|Fail|identifier=nil
Login|3-Online|Fail|code=6208, msg=kick off by other device
Login|5-Callback|Fail|msg=user not set succ callback

登出

成功的登录流程:

代码语言:javascript
复制
Logout|1-Begin|Succ|
Logout|2-Callback|Succ|

步骤

说明

1-Begin

调用入口打印

2-Callback

回调用户打印,用户如果没有设置回调,打印失败,说明

被踢

被踢正常流程:

代码语言:javascript
复制
ForceOffline|1-Recv|Succ|recv cmd im_open_status.stat_forceoffline
ForceOffline|2-Logout|Succ|
ForceOffline|3-Callback|Succ|call user forceoffline callback

步骤

说明

1-Recv

从QAL收到被踢消息

2-Logout

内部Logout成功

3-Callback

回调用户,如果用户没有设置,打印失败

失败示例:

代码语言:javascript
复制
ForceOffline|3-Callback|Fail|msg=user not set forceoffline callback

开发者只需要关注 3-Callback

发消息

正常流程:

代码语言:javascript
复制
SendMsg|1-Begin|Succ|type=1, conversation=123
SendMsg|2-Upload|Succ|
SendMsg|3-TinyIdCvt|Succ|
SendMsg|4-Send|Succ|
SendMsg|5-Callback|Succ|code=%d, msg=%s

其中有资源上传(如图片、文件、语音、视频消息)的会打印 2-Upload,标识上传资源是否成功,纯文本没有此阶段。 单聊消息会打印 3-TinyIdCvt,群消息没有这个步骤,不会打印

开发者只需要关注:1-Begin 表示是否有调用SendMessage方法,5-Callback 表示是否有回调给上层成功或者失败。

收在线消息

代码语言:javascript
复制
RecvMsg|1-OnlinePush|Succ|
RecvMsg|2-IMBegin|Succ|msgtype=%d, subtype=%d
RecvMsg|3-ParseOver|Succ|C2C or GRP:sid=%s, subtype=%s...
RecvMsg|CheckDup|
RecvMsg|4-Callback|Succ|

步骤

说明

1-OnlinePush

收到OnlinePush,msgtype,subtype,PB二进制,Debug级别

2-IMBegin

imcore 开始处理消息,打印收到的命令字,可判断是群组消息还是c2c消息

3-ParseOver

消息解析完成,打印详细消息信息,如seq,rand等

CheckDup

去重,如果有去重会打印

4-Callback

回调用户,如果用户没有设置,打印失败

开发者只需要关注:RecvMsg|4-Callback,表示收到消息后回调给上层。

收AVChatRoom消息

AVChatRoom 收消息机制跟其他消息不同,可先检查最后几步:

代码语言:javascript
复制
RecvMsg|3-ParseOver|Succ|C2C or GRP:sid=%s, subtype=%s...
RecvMsg|CheckDup|
RecvMsg|4-Callback|Succ|

开发者只需要关注:RecvMsg|4-Callback,表示收到消息后回调给上层。

加群

代码语言:javascript
复制
JoinGroup|1-Begin|Succ|group id=%s
JoinGroup|2-Send|Succ|group id=%s
JoinGroup|3-Callback|Succ|code=%d, msg=%s

说明:

步骤

说明

1-Begin

用户调用JoinGroup

2-Send

发加群的请求给server

3-Callback

回调用户

创建群组

代码语言:javascript
复制
CreateGroup|1-Begin|Succ|
CreateGroup|2-Send|Succ|groupid=%s

常见问题排查

收不到消息

检查项

说明

检查是否出于登录状态

根据客户端日志登录、被踢确定

群消息:检查是否是群成员

群组是否解散、是否有加群等

是否有接收消息

根据收在线消息确定是否有收到消息,是否有回调给用户两个点确定

是否被踢

根据被踢章节判断是否有收到server下来的被踢消息,是否有回调给用户

收到重复消息

收到消息回调给用户之前都会打印:RecvMsg|4-Callback,可通过此日志判断是否有回调给用户多次。例如,按照关键词过滤,抛出4条消息的日志:

代码语言:javascript
复制
[16-08-30 16:41:48][INFO][][IMCoreNotify]RecvMsg|4-Callback|Succ|type=C2C, sid=108220141, msgid=164147849, seq=1068038125, rand=164147849, time=1472546507, isRead=true
[16-08-30 16:41:48][INFO][][IMCoreNotify]RecvMsg|4-Callback|Succ|type=C2C, sid=108220109, msgid=164147761, seq=185633201, rand=164147761, time=1472546507, isRead=true
[16-08-30 16:41:49][INFO][][IMCoreNotify]RecvMsg|4-Callback|Succ|type=C2C, sid=108219803, msgid=164147671, seq=280898683, rand=164147671, time=1472546507, isRead=true
[16-08-30 16:41:49][INFO][][IMCoreNotify]RecvMsg|4-Callback|Succ|type=C2C, sid=108219917, msgid=164147946, seq=376583928, rand=164147946, time=1472546508, isRead=true

关键字说明

说明

关键字

版本查询

Versioin

推送

im_open_push.msg_push

离线推送

OfflinePush

在线推送

OnlinePush

收到消息

RecvMsg

未读数

UpdateMsgReadedSeq

未读上报

msg_unread

用户掉线

sso_conn.cc

版本查询

Versioin

发送群消息

group_open_svc.group_msg_send

接收群消息

group_open_svc.group_msg_report

查询用户资料

Profile.PortraitGet_PB

查询会话列表

Recentcontact.Get_PB