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-Begin
和 5-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条消息的日志:
[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 |