本文将为您介绍如何初始化终端性能监控 Pro 日志 SDK。
配置和启动 SDK
由于 SDK 中的打印日志、KV 存储及文件压缩均是可替换模块,故在 SDK 初始化前,需要先配置好对应的依赖情况。
1. SDK 通过 TDIAGDepends 来管理模块的依赖情况。TDIAGDepends 实例需要提供实现 id<TDLoggingIMPProtocol>、id<RAFTKVStorageFactoryProtocol> 和 id<TDLogFilePackerProtocol> 的实例。例如:
#import <TDOS_Diagnose/TDOS_Diagnose.h> // 日志 SDK 模块#import <TDOS_Diagnose/TDMMKVFactoryImpl.h> // MMKV 模块#import <TDOS_Diagnose/TDOSLoggerProxy.h> // 打印日志模块#import <TDOS_Diagnose/TDLogFilePackerImp.h> // 文件压缩模块// 使用 SDK 提供的默认模块TDOSLoggerProxy *loggerProxy = [TDOSLoggerProxy defaultProxy];TDMMKVFactory *kvFactory = [TDMMKVFactoryImpl sharedInstance];TDLogFilePackerImp *filePacker = [[TDLogFilePackerImp alloc] init];// 创建一个 TDIAGDepends 实例子TDIAGDepends *depends = [TDIAGDepends dependsWithLogImp:loggerProxykvFactoryImp:kvFactoryandFilePackerImp:filePacker];
上述例子中的 TDOSLoggerProxy、TDMMKVFactoryImpl 及 TDLogFilePackerImp 均是 SDK 提供的默认且实现了对应接口的实例。创建完 TDIAGDepends 后,便可以正常初始化 SDK 了。
// appid & appKey, 平台生成NSString *appID = BUGLY_APPID;NSString *appKey = BUGLY_APPKEY;
3. 这里需要提供一个 dataSource,该对象需要实现 TDLogSDKDataSource 协议,为 SDK 提供必要的数据。详情可以参考 TDLogSDKDataSource 中的定义。 其中必须实现
- (NSString *)guidForTDLog; 方法,该方法返回用户唯一ID,平台下发命令时填写此 ID。// 生成捞日志模块配置实例,并初始化TDLogSDKConfig *config = [TDLogSDKConfig configWithAppId:appIDappKey:appKeydataSource:selfdepends:depends];
注意:
默认情况下,日志模块使用的内部域名,对于 RumPro 用户而言,需要在 TDLogSDKConfig 中提供对应的域名类型:
/// 设置服务域名类型@property (nonatomic,assign)TDLogServerHostType serverHostType;/// 设置上报域名https://cloud.bugly.qq.com/// 自定义服务器域名@property(nonatomic,strong)NSString *customServerHost;
4. 根据业务需求,可以配置对应的频率和流量控制策略,确保不会因为频繁上报日志占用过多的网络资源等。
// 开启频率控制(默认不限制),传空表示使用 SDK 默认频控策略:2次/5min,也可传入自定义策略;被限制后自动上报接口会回调失败。// 举例:10min内最多只允许3次上报(采用令牌桶算法)// TDLogFrequencyControlStrategy *strategy = [TDLogFrequencyControlStrategy new];// strategy.times = 3;// strategy.timeInterval = 10 * 60;// 注意,该接口要求 TDLogSDKDataSource 必须实现 whitelistForAutoUploadTags 协议,提供自动上报 tag 白名单,避免影响必要上报。[config setFrequencyLimitStatusForAutoUpload:YESwithCustomControlStrategy:nil]; // 推荐设置,确保不频繁自动上报// 开启流量控制(默认不限制),传0表示禁止上报,传入负值代表不限制,被限制后自动上报接口会回调失败。// 注意,该接口要求 TDLogSDKDataSource 必须实现 whitelistForAutoUploadTags 协议,提供自动上报 tag 白名单,避免影响必要上报。[config setTrafficQuota24hLimitForAutoUpload:(200 * 1024 * 1024)xgQuota:(50 * 1024 * 1024)]; // 可选,设置自动上报流量限额
5. 最后调用对应的方法启动 SDK,即可完成初始化工作。
[[TDLogSDK sharedInstance] startWithConfig:config];
配置本地打印日志模块
上述中的 TDOSLoggerProxy,实际上是对 TDOS_Diagnose 中的日志打印模块 TDOSLogger 所提供的 TDLoggingIMPProtocol 接口进行的封装实现。若要使用 TDOSLogger 模块,需要对该模块进行初始化,步骤如下:
1. 初始化打印日志模块。
// 初始化打印日志模块TDOSLoggerConfig *loggerConfig = [TDOSLoggerConfig defaultConfig];TDOSLogger *logger = [[TDOSLogger alloc] initWithConfig:loggerConfig];
2. 将实例化后的 logger 对象设置到上述过程中的 TDOSLoggerProxy 对象中,以正常使用 TDOSLogger 模块。
TDOSLoggerProxy *loggerProxy = [TDOSLoggerProxy defaultProxy];[loggerProxy setLogger:logger];
注意:
Extension 项目接入特别说明:本 SDK 支持 iOS Extension,如使用默认的依赖模块 MMKV ,需在项目 Podfile 中添加如下脚本:
post_install do |installer|installer.pods_project.targets.each do |target|if target.name == "MMKV"target.build_configurations.each do |config|config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'MMKV_IOS_EXTENSION']endendendend