原生iOS解决方案
使用说明文档
功能描述
1. 日志是否打印的控制:debug模式下logcat打印日志 release模式下logcat不打印日志
2. 日志是否上传的控制:配置是否需要实时上报日志,上报的日志的类型以及上报Activity生命周期方法的上报(服务器进行配置,参见服务器文档)
快速接入
申请应用标识AppKey
可以在控制台查看当前应用信息,找到当前APP的AppKey
配置gradle文件
Android Studio环境下: 在build.gradle文件中,添加如下依赖即可:
- 在主工程的build.gradle文件中添加如下引用:
buildscript {
repositories {
maven { url "http://artifactory.jd.com/libs-releases-local/" }
}
}
allprojects {
repositories {
maven { url "http://artifactory.jd.com/libs-releases-local/" }
}
}
- 在module 工程中的build.gradle文件中添加如下依赖
dependencies {
compile 'com.jingdong.wireless.jdsdk:oklog:1.5.8'
}
当前oklog组件最新版本为 *1.5.8*
SDK需要的权限
在使用上报SDK的时候,会使用到以下权限,请在AndroidManifest.xml 设置如下权限:
<uses-permission android:name="android.permission.INTERNET" />
<!-- 检查网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
代码混淆
在使用性能监测sdk与上报sdk的时候,需要保证部分类在打包过程中不被混淆,具体的配置如下:
在混淆文件 proguard-rules.pro 中添加如下keep配置:
-keep class com.jingdong.sdk.oklog.** {*;}
接入注意点
当前shooter与OkLog引用的上报sdk版本可能不一致,需要以shooter中的为准,接入方式如下:
compile('com.jingdong.wireless.jdsdk:oklog:1.5.8', {
exclude group: 'com.jingdong.wireless.jd_official_sdk.sdk', module: 'JdBaseReporter'
})
SDK初始化
请在Application中onCreate()方法初始化sdk
如果您的项目 已经使用了Shooter SDK(Sentry)并且已经完成了初始化,您可以使用如下初始化方式:
OKLog.init(this);
如果您的项目 未使用Shooter SDK(Sentry),那么您需要单独对OkLog组件进行初始化:
a. 您可以使用如下默认初始化方式:
OKLog.init(this, "Your AppId");
b. 上报数据记录需要AccountId(用户pin)及 UUID(设备唯一识别码)
方式一: 直接传值(用户初始化期间可获取相应ID)
OKLog.init(OKLogConfig.newBuilder(this) .setAppId("Your AppId") .setAccountId("Your AccountId") .setUuid("Your UUID") .build());
方式二: 回调传值(用户不能及时获取相应ID)
OKLog.init(OKLogConfig.newBuilder(this) .setAppId("Your AppId") .setAccountIdConfig(new UserProfile.IAccountIdCallBack() { @Override public String accountId() { return "Your AccountId"; } }) .setUuidConfig(new UserProfile.IUUIDCallBack() { @Override public String uuid() { return "Your UUID"; } }) .build());
方法含义
方法名称 | 作用 |
---|---|
newBuilder() | 创建内部类Builder |
setDebug(boolean) | true:只进行logcat输出; false: release版本,logcat不输出,默认为false |
setLogWrapperClassFullNames(String[]) | 如果对于OKLog有一层或者多层封装,请设置该参数,以便于在定位调用者className时过滤掉这些封装,找到真正的调用方,请传入全类名 |
setAppId(String appId) | 设置用户应用对应的appId |
setAccountId(String accountId) | 设置用户帐号信息,可配合OKLog.updateAccountId()手动修改 |
setUuid(String uuid) | 设置用户硬件地址信息,可配合OKLog.updateUUID()手动修改 |
setAccountIdConfig(UserProfile.IAccountIdCallBack) | 设置用户帐号信息回调,优先级高于setAccountId,使用该方式后setAccountId以及OKLog.updateAccountId()手动修改都不会生效 |
setUuidConfig(UserProfile.IAccountIdCallBack) | 设置用户硬件地址信息回调,优先级高于setUuid,使用该方式后setUuid以及OKLog.updateUUID()手动修改都不会生效 |
功能的开启与服务器的策略下发
通过服务器动态下发策略,来实现日志上报功能的开启以及上报配置好的类型的日志 或者关闭
API 使用说明
API 说明
- 类 OKLog
变量 | 描述 |
---|---|
boolean V | 默认为false,debug情况下初始化为true,针对Verbose级别日志,即OKLog.v()系列方法 我们会严格对应V 变量与 v()系列方法,请务必保持对应关系,否则日志可能不会上传 |
boolean D | 同上,对应Debug级别日志,OKLog.d()系列方法。 |
boolean I | 同上,对应Info级别日志,OKLog.i()系列方法。 |
boolean W | 同上,对应Error级别日志,OKLog.w()系列方法。 |
boolean E | 同上,对应Warn级别日志,OKLog.e()系列方法。 |
- 方法详细资料
方法 | 参数 | 描述 |
---|---|---|
v | String tag, String msg | 输出msg, verbose级别 |
v | String tag, Throwable tr | 输出tr信息, verbose级别 |
v | String tag, String msg, Throwable tr | 输出msg和tr, verbose级别 |
v | String tag, Object... args | 输出可变参数args, verbose级别 |
d | 同上述4种 | debug级别 |
i | 同上述4种 | info级别 |
w | 同上述4种 | warn级别 |
e | 同上述4种 | error级别 |
使用
与Android系统自带的Logcat的使用一样,oklog对其进行了拓展,支持打印json map等
OKLog.d(TAG,"====d");
OKLog.w(TAG,"====w");
OKLog.i(TAG,"====i");
OKLog.e(TAG,"====e");
OKLog.d("obj",Arrays.asList("foo", "bar"));
OKLog.json("j", "{ \"key\": 3, \"value\": something}");
Map<String, String> map = new HashMap<>();
map.put("key", "value");
map.put("key1", "value2");
OKLog.d("map", map);
使用注意点
- 如果对于OKLog有一层或者多层封装,请设置setLogWrapperClassFullNames,以便于在定位调用者className时过滤掉这些封装,找到真正的调用方,请传入全类名
- 我们会严格对应V 变量与 v()系列方法,请务必保持对应关系,否则日志可能不会上传