APRemoteLogger+Internal.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. //
  2. // APRemoteLogger+Internal.h
  3. // APRemoteLogging
  4. //
  5. // Created by 卡迩 on 2017/4/12.
  6. // Copyright © 2017年 Alipay. All rights reserved.
  7. //
  8. #import "APRemoteLogging.h"
  9. @class APLogManualPageInfo;
  10. /**
  11. 内部埋点使用的 bizType,需要从下面的 bizType 中获取,以规范埋点开关的管控
  12. */
  13. typedef NS_ENUM(NSInteger, mPaaSBizType)
  14. {
  15. mPaaS_Alive_iOS, // 报活
  16. mPaaS_Launch_iOS, // 启动速度
  17. mPaaS_LAG_iOS, // 卡顿
  18. mPaaS_ANR_iOS, // 卡死
  19. mPaaS_Crash_iOS, // 闪退
  20. mPaaS_Automation_iOS, // 自动化
  21. mPaaS_HotPatch_iOS, // hotpatch
  22. mPaaS_Push_iOS, // 推送
  23. mPaaS_Sync_iOS, // 同步
  24. mPaaS_Scan_iOS, // 扫码
  25. mPaaS_Nebula_iOS, // H5容器
  26. mPaaS_TinyApp_iOS, // 小程序
  27. mPaaS_RPC_iOS, // RPC
  28. mPaaS_Upgrade_iOS, // 版本升级
  29. mPaaS_ConfigService_iOS, // 开关配置
  30. mPaaS_Share_iOS, // 分享
  31. mPaaS_Storage_iOS, // 统一存储
  32. mPaaS_LBS_iOS, // LBS
  33. mPaaS_CDP_iOS, // CDP
  34. mPaaS_Device_iOS, // 设备标识
  35. mPaaS_TAC_iOS, // TAC
  36. mPaaS_WebApp_iOS, // webapp
  37. mPaaS_WebAppTiny_iOS, // webapp-tiny
  38. mPaaS_NebulaTech_iOS, // NebulaTech
  39. mPaaS_OCR_iOS, // OCR
  40. mPaaS_SafeKeyboard_iOS, // 安全键盘
  41. mPaaS_Traffic_iOS, // 流量监控
  42. mPaaS_Framework_iOS, // 框架
  43. mPaaS_Multimedia_iOS, //多媒体
  44. mPaaS_Client_iOS, // 客户端 license
  45. mPaaSMonitorNetiOS, // APM网络
  46. };
  47. //把APRemoteLogging.h中那堆不需要普通业务关注的接口移到了这里. by 卡迩
  48. NS_ASSUME_NONNULL_BEGIN
  49. @interface APRemoteLogger (Internal)
  50. #pragma mark -
  51. #pragma mark 兼容需要保留
  52. #ifdef SDK_IS4_ALIPAY
  53. /**
  54. * 注意:新的埋点不要调用此接口,为保持兼容以前的代码所以保留
  55. * 8.3之前的老的页面继续使用此接口,8.3新开的页面使用writeLogWithActionId:..这个接口
  56. *
  57. * @param dict log 字典
  58. */
  59. +(void)writeLogWithLogDictionary:(NSDictionary *) dict /*__deprecated*/;
  60. #endif
  61. #pragma mark -
  62. #pragma mark Global State
  63. /**
  64. 获取最近一次手动PV埋点(pageMonitor)生成的pageInfo对象.
  65. @return 最近一次手动PV埋点生成的pageInfo对象.
  66. */
  67. + (nullable APLogManualPageInfo *)currentPageInfo;
  68. /**
  69. 获取最后点击的控件的spm值.
  70. @return 最后点击的控件的spm值(若有).
  71. */
  72. +(nullable NSString *)lastClickSpm;
  73. /**
  74. 更新最后点击的spm值.
  75. @note 该方法供自动化埋点SDK调用,业务方不要使用.
  76. @param spm 最后点击的spm值.可以为空.
  77. */
  78. +(void)setLastClickSpm:(nullable NSString *)spm;
  79. #ifdef SDK_IS4_ALIPAY
  80. /**
  81. * 界面点击的ActionToken(TraceID)
  82. *
  83. * @return 最近界面点击的ActionToken(TraceID)
  84. */
  85. +(nullable NSString *) currentActionToken;
  86. /**
  87. * 界面点击的ActionToken的生成时间戳,为精简RPC包大小而提供
  88. *
  89. * @return 最近界面点击的ActionToken的生成时间戳
  90. */
  91. +(unsigned long long) tokenTimestamp;
  92. /**
  93. * 界面点击的最近一个控件标识
  94. *
  95. * @return 最近界面点击的最近一个控件标识
  96. */
  97. +(nullable NSString *) currentActionControlID;
  98. /**
  99. * 当前页面的ID
  100. *
  101. * @return 当前页面的ID
  102. */
  103. +(nullable NSString *) currentPageID;
  104. +(nullable NSString *) lastPageID;
  105. #endif
  106. +(nullable NSString *) currentSubAppID;
  107. #ifdef SDK_IS4_ALIPAY
  108. +(void) resetCurrentPageId:(nonnull NSString *)pageId;
  109. /**
  110. * 页面数据准备好到达可用状态,由业务主动调用
  111. *
  112. * @return void
  113. */
  114. + (void)pageDidFinishInitializing;
  115. /**
  116. * 字符串数组格式化转成str1|str2|str3格式字符串
  117. *
  118. * @param array 字符串数组
  119. *
  120. * @return 格式化后字符串
  121. */
  122. + (nonnull NSString *)convertToStringFromArray:(nonnull NSArray *)array;
  123. /**
  124. * 设置扩展参数,支持扩展参数的日志模型(行为,性能)
  125. * 字典转成 key=value^key=value^key=value 格式字符串
  126. *
  127. * @return void
  128. */
  129. + (void)setFoundationExtended:(nullable NSDictionary *)dict;
  130. /**
  131. * 字典格式化 转成 key:value&key:value&key:value 格式字符串
  132. *
  133. * @param dictionary 字典
  134. * @param kvSeparator 可以为空,默认使用:连接,字典key和value的连接字符(比如key:value)
  135. * @param componentsSeparator 可以为空,默认使用&连接,每队key,value组合后的连接字符(比如key:value&key:value)
  136. * @return 格式化后的字符串
  137. *
  138. */
  139. + (nonnull NSString *)convertToStringFromDictionary:(nonnull NSDictionary *)dictionary
  140. kvSeparator:(nullable NSString *)separator1
  141. componentsSeparator:(nullable NSString *)separator2;
  142. #endif
  143. /**
  144. * 取索引的pageid
  145. * @param index pageid索引
  146. * @return 页面流水号
  147. */
  148. + (nullable NSString *)pageIdForIndex:(nonnull NSObject *)index;
  149. #ifdef SDK_IS4_ALIPAY
  150. /**
  151. * 取索引的pageid的时间戳
  152. * @param index pageid索引
  153. * @return 页面流水号的时间戳
  154. */
  155. + (nullable NSString *)pageIdTimestampForIndex:(nonnull NSObject *)index;
  156. /**
  157. * 取索引的spmid
  158. * @param index pageid索引
  159. * @return 页面spmid
  160. */
  161. + (nullable NSString *)spmIdForIndex:(nonnull NSObject *)index;
  162. #endif
  163. /**
  164. * 取索引的信息
  165. * @param index pageid索引
  166. * @param type pageInfo类型
  167. * @return 页面信息
  168. */
  169. + (nullable NSString *)pageInfomationForIndex:(nonnull NSObject *)index forType:(APRemoteLoggerPageInfomationType)type;
  170. #ifdef SDK_IS4_ALIPAY
  171. /**
  172. * 清除所有无效的历史流水号
  173. */
  174. + (void)resetPageMonitorContext;
  175. /**
  176. * 向spmpage列表中添加page页
  177. */
  178. + (void)addSpmPage:(nonnull NSString *)spmPage;
  179. /**
  180. * 得到日志等级
  181. */
  182. + (NSInteger)levelNumberForString:(nonnull NSString *)strLevel;
  183. /**
  184. * 设置外部开关值
  185. */
  186. + (void)setSwitchValue:(nullable NSString *)value forKey:(nonnull NSString *)key;
  187. /**
  188. 设置统一开关值
  189. @param configDict 开关字典
  190. */
  191. +(void)setSwitchDict:(NSDictionary *)configDict;
  192. #endif
  193. /**
  194. * 获取外部开关值
  195. */
  196. + (NSString *)switchValueForKey:(nonnull NSString *)key;
  197. #ifdef SDK_IS4_ALIPAY
  198. /**
  199. 是否已经完成历史日志文件检查
  200. @note 在该方法返回YES后,触发某个bizType的日志的上报会附加上历史日志,否则只会上报本次启动产生的日志
  201. @return 在启动完成一定时间后会捞取历史日志到内存中,当该动作已完成时,返回 YES, 否则返回 NO.
  202. */
  203. + (BOOL)isHistoryLogFileChecked;
  204. /**
  205. 自动化埋点记录的refer值(若有)
  206. @return 当前自动化埋点记录的refer值(若有),未引入autotracker时,总是返回nil.
  207. */
  208. + (nullable NSString *)currentAutoRefer;
  209. #pragma mark -
  210. #pragma mark 以下函数业务不要调用
  211. +(void)mPaaS_writeCrashLog:(NSString *) report vcStack:(NSString *) vcStack;
  212. +(NSDictionary*)stateWhenCrashed:(NSString*)vcStack thread:(thread_t)thread ucontext:(void *)ucontext;
  213. +(void)mPaaS_writeCrashLog:(NSString *)report state:(NSDictionary*)state innerVersion:(NSString *)innerVersion;
  214. +(void)writeOOMLog:(NSString *)report state:(NSDictionary *)infoDic;
  215. + (void)writePerformanceLogWithType:(APLogType)type
  216. subType:(NSString *) subType
  217. extraParams:(NSArray *) extraParams
  218. actionControlID:(NSString *) controlID
  219. actionToke:(NSString *) actionToken;
  220. +(void)upload;
  221. #endif
  222. + (void)protectExtentionParams:(NSMutableArray *)params;
  223. #ifdef SDK_IS4_ALIPAY
  224. +(void) logAutoEventWithBizType:(NSString*)bizType params:(NSArray*)params;
  225. +(void) logPageBeginRenderWithPageName:(NSString *) name;
  226. +(void) logPageStartWithPageId:(NSString *) pageId appId:(NSString *) appId
  227. sourceAppId:(NSString *) sourceAppId pageName:(NSString *) pageName;
  228. + (void)logPageMonitorWithMonitorType:(NSString *)monitorType;
  229. + (NSString *)logPageMonitorType;
  230. NSString *pageDidAppearName(NSString *pageName);
  231. + (void)logPageEndRenderWithPageName:(NSString *)name;
  232. +(BOOL) statusForWriteLogSwitch:(NSString*) logType;
  233. +(BOOL) statusForSendLogSwitch:(NSString*) logType;
  234. +(void) checkCrashLogWithCompletionBlock:(void (^)(void)) block;
  235. void updateSwitchProfile(NSString *actionType);
  236. // 添加OC版本的接口,为了利用OC的动态特性实现模块间解耦合
  237. + (void)SLWriteMonitorLog:(NSDictionary*)attachDict appID:(NSString*)appID monitorType:(NSString*)monitorType subMonitorType:(NSString*)subMonitorType mPaaSBizType:(mPaaSBizType)bizType;
  238. + (void)APWriteNetLog:(NSString*)identifier size:(NSString*)size type:(NSString*)type owner:(NSString*)owner extDict:(NSDictionary*)extDict;
  239. void APWriteNetLog(NSString *identifier, NSString *size, NSString* type, NSString *owner, NSDictionary * extDict);
  240. ///**
  241. // * 暂停日志上传,最大暂停时间为60s,时间过后自动打开日志上传
  242. // * 设置这个机制的原因是防止调用方异常,没有调用resumeLogUploading等情况下,导致日志无法上传。
  243. // *
  244. // * @param secondes 自定义的日志暂停上传时间,最大值为60s,最小值为1s,其余值将导致默认暂停10s
  245. // */
  246. //+(void) suspendLogUploadingForSeconds:(int) seconds;
  247. ///**
  248. // * 立即恢复日志上传功能
  249. // */
  250. //+(void) resumeLogUploading;
  251. #endif
  252. /**
  253. 添加周期性执行的block. 每30s执行一次.
  254. */
  255. +(void)addPeriodicallyExecutedBlock:(void (^)(void))block;
  256. #pragma mark - Interface for Alipayinside
  257. /**
  258. 添加自定义bizType 内容 日志
  259. */
  260. + (void)writeLogWithCustomContent:(NSString *) content
  261. bizType:(NSString *) bizType;
  262. #ifdef SDK_IS4_TAOBAO
  263. /**
  264. * 设置用户的id跟认证信息
  265. * @param userId,登录用户的用户id
  266. */
  267. + (void)setUserId:(NSString *)userId;
  268. #endif
  269. /**
  270. @param module 模块名称,如APMobileFramework。此值对应自定义分析大盘配置中的事件,即一个模块对一个事件
  271. @param params 参数信息,以字典形式存入,key对应自定义分析配置中的属性
  272. */
  273. - (void)writeMPaaSSDKLogWithModule:(NSString *)module params:(NSDictionary *)params;
  274. #pragma mark - 仅 mPaaS 内部使用
  275. + (NSString *)getMPaaSBaseline;
  276. /**
  277. 内部专用行为埋点接口,用于组件状态上报
  278. @param bizType 埋点业务类型,必传,用于埋点开关控制,需要使用上面定义枚举
  279. @param seed 埋点ID,必传,用于数据清洗
  280. @param extraParams 埋点扩展参数数组,@{"", "", "", @{}}
  281. */
  282. + (void)writeBehaviorLogWithBizType:(mPaaSBizType)bizType
  283. seed:(nonnull NSString *)seed
  284. extraParams:(nonnull NSArray *)extraParam;
  285. /**
  286. 内部专用复杂行为埋点接口
  287. */
  288. + (void)writeBehaviorLogWithActionId:(NSString *)actionId
  289. extParams:(NSArray *)extraParam
  290. appId:(NSString *)appId
  291. seed:(NSString *)seed
  292. ucId:(NSString *)ucId
  293. bizType:(mPaaSBizType)bizType
  294. formatterDictionary:(NSDictionary *)formatterDictionary;
  295. /**
  296. 专用性能接口,上报大盘使用的性能埋点
  297. @param bizType 埋点业务类型,必传,用于埋点开关控制,需要使用上面定义枚举
  298. @param number 日志上报条数阈值。当传入 0 时,底层方法会取默认上报条数阈值。
  299. */
  300. + (void)mPaaS_writePerformanceLogWithType:(mPaaSBizType)type
  301. subType:(nullable NSString *)subType
  302. extraParams:(nullable NSArray *)extraParams
  303. formatterDictionary:(nullable NSDictionary *)formatterDictionary
  304. perUploadNum:(NSUInteger)number;
  305. /**
  306. 卡死日志上报
  307. */
  308. + (void)mPaaS_writeANRPerformanceLogWithBizType:(mPaaSBizType)bizType
  309. subType:(nullable NSString *)subType
  310. extraParams:(nullable NSArray *)extraParams
  311. formatterDictionary:(nullable NSDictionary *)dictionary
  312. perUploadNum:(NSUInteger)number;
  313. /**
  314. 卡顿日志上报
  315. */
  316. void mPaaS_SLWriteMonitorLog(NSDictionary * attachDict, NSString* appID, NSString *monitorType, NSString *subMonitorType, mPaaSBizType bizType);
  317. /**
  318. * 网络类型
  319. */
  320. + (NSString *)currentNetEnvString;
  321. /**
  322. APM网络RPC日志上报
  323. */
  324. + (void)mPaaSAPMRPCNetLog:(mPaaSBizType)bizType extDict:(NSDictionary*)extDict;
  325. /**
  326. APM 业务自定义网络埋点
  327. */
  328. + (void)mPaaSAPMNetCustomLog:(NSDictionary*)extDict;
  329. @end
  330. NS_ASSUME_NONNULL_END