日志能力
使用日志能力相关接口来满足在不同场景下操作应用内日志的需求,如写入日志、导出日志等。
写入日志
调用logDebug等方法写入日志,在应用导出的日志中会包含写入的日志。
接口定义
iOS:
code-group
Swift
/// 日志服务接口
@objc public protocol KIMLogServicePublicInterface {
/// 写入Debug级别的日志
/// - Parameter message: Debug日志内容
@objc func logDebug(message: String)
/// 写入Info级别的日志
/// - Parameter message: Info日志内容
@objc func logInfo(message: String)
/// 写入Warning级别的日志
/// - Parameter message: Warning日志内容
@objc func logWarning(message: String)
/// 写入Error级别的日志
/// - Parameter message: Error日志内容
@objc func logError(message: String)
}
Android:
code-group
Kotlin
// 日志服务接口
interface KIMILogService : KIMISdkLinkupService {
/**
* 只在控制台打印Log,不会持久化到日志文件中
* 日志类型:Debug
* @param tag 用于标识日志来源的标签,通常为类名或模块名。
* @param msg 需要打印的日志消息。
*/
fun logDebug(tag: String, msg: String)
/**
* 控制台打印Log,且会持久化到日志文件中
* 日志类型:Info
* @param tag 用于标识日志来源的标签,通常为类名或模块名。
* @param msg 需要打印的日志消息。
*/
fun logInfo(tag: String, msg: String)
/**
* 控制台打印Log,且会持久化到日志文件中
* 日志类型:Warning
* @param tag 用于标识日志来源的标签,通常为类名或模块名。
* @param msg 需要打印的日志消息。
*/
fun logWarning(tag: String, msg: String)
/**
* 控制台打印Log,且会持久化到日志文件中
* 日志类型:Error
* @param tag 用于标识日志来源的标签,通常为类名或模块名。
* @param msg 需要打印的日志消息。
*/
fun logError(tag: String, msg: String)
}
代码示例
iOS:
code-group
Swift
/// 写入Debug日志
KIMInject.call(KIMLogServicePublicInterface.self)?.logDebug(message: "KIMExtensionProject|KIMExtensionAppDelegate|Debug")
/// 写入Info日志
KIMInject.call(KIMLogServicePublicInterface.self)?.logInfo(message: "KIMExtensionProject|KIMExtensionAppDelegate|Info")
/// 写入Warning日志
KIMInject.call(KIMLogServicePublicInterface.self)?.logWarning(message: "KIMExtensionProject|KIMExtensionAppDelegate|Warning")
/// 写入Error日志
KIMInject.call(KIMLogServicePublicInterface.self)?.logError(message: "KIMExtensionProject|KIMExtensionAppDelegate|Error")
Android:
code-group
Kotlin
val service = KIM.getService().getLinkUpService(KIMILogService::class.java)
// 写入Debug日志
service?.logDebug(tag, "testDebug")
// 写入Info日志
service?.logInfo(tag, "testInfo")
// 写入Warning日志
service?.logWarning(tag, "testWarning")
// 写入Error日志
service?.logError(tag, "testError")
导出日志
应用内部提供导出日志入口,如需要在额外的入口导出日志可调用exportLogZips方法将应用内的日志文件压缩成zip格式,并导出至指定路径。日志成功导出后,开发者可以通过导出的日志路径来查看或分享日志文件。
接口定义
iOS:
code-group
Swift
/// 日志服务接口
@objc public protocol KIMLogServicePublicInterface {
/// 导出日志到指定路径。
/// - Parameters:
/// - startDate: 导出日志的起始日期。
/// - endDate: 导出日志的结束日期。
/// - path: 日志存放路径, 如果目录未创建, 则会自动创建。
/// - completion: 日志导出结果回调。
/// - paths: 导出成功后的一个或多个日志路径数组,导出失败时为空。
///
/// 调用该方法导出日志到指定路径下,可以通过导出的日志路径来查看或分享日志文件。导出时可以指定起始和结束日期进行日志过滤,如果不指定,则导出全部日志。
@objc func exportLogZips(startDate: Date?,
endDate: Date?,
path: String,
completion: ((_ paths: [String]) -> Void)?)
}
Android:
code-group
Kotlin
// 日志服务接口
interface KIMILogService : KIMISdkLinkupService {
/**
* 导出日志文件压缩包
* @param filterTimestampStart - 过滤的时间节点(时间戳)开始时间,0表示不过滤。
* @param filterTimestampEnd - 过滤的时间节点(时间戳)结束时间,0表示不过滤。
* @param zipExtName - 压缩成Zip时额外添加的后缀文件名,比如DeviceID,命名规则为Android-时间戳-zipExtName.zip
* @param splitSize - 压缩成Zip时,进行拆分的文件最大大小,默认0,表示不拆分
* @param callback 导出结果回调,返回的日志zip文件列表
*/
fun exportLog2Zips(
filterTimestampStart: Long? = 0,
filterTimestampEnd: Long? = 0,
zipExtName: String? = "",
splitSizeMB: Int = 0,
callback: (List<File>?) -> Unit
)
}
代码示例
iOS:
code-group
Swift
/// 导出日志到指定路径,可以指定起始和结束日期进行日志过滤
/// 此处如果实现了attachLogFilePaths方法,将会把返回路径下的额外日志文件复制到日志包中一同导出。
KIMInject.call(KIMLogServicePublicInterface.self)?.exportLogZips(startDate: nil, endDate: nil, path: tempPath) { paths in
/// 通过导出的日志路径来查看或分享日志文件。
}
Android:
code-group
Kotlin
val service = KIM.getService().getLinkUpService(KIMILogService::class.java)
// 导出日志到指定路径,可以指定起始和结束日期进行日志过滤
// 此处如果实现了attachLogFilePaths方法,将会把返回路径下的额外日志文件复制到日志包中一同导出。
service?.exportLog2Zips(filterTimestampStart,
filterTimestampEnd,
zipExtName,
splitSizeMB,
callback)
附加额外日志
实现attachLogFilePaths接口返回需要额外附加的日志路径。应用在导出日志时,会调用该方法把需要额外添加的日志文件复制到导出日志zip包中。
接口定义
iOS:
code-group
Swift
/// 日志拓展能力
@objc public protocol KIMLogServiceCapability {
/// 返回第三方附加日志文件路径。
/// - Parameter paths: 第三方日志文件路径数组,如果为空则不附加任何日志。
///
/// 实现该方法返回需要额外附加的日志路径。应用在导出日志时,会调用该方法把需要额外添加的日志文件复制到导出日志zip包中。
@objc func attachLogFilePaths() -> [String]?
}
Android:
code-group
Kotlin
/**
* KIMExpMultipleLog 是一个拓展服务类,用于处理来自第三方附加日志文件路径。
* 一个扩展服务的多个扩展实现均生效,外部实现这个扩展点类,并注册即可。
*/
abstract class KIMExpMultipleLog : KIMExpMultiple {
/**
* attachLogFilePaths 用于获取第三方的日志文件路径
* 实现该方法返回需要额外附加的日志路径。应用在导出日志时,会调用该方法把需要额外添加的日志文件复制到导出日志zip包中。
*/
open fun attachLogFilePaths(): List<String>? {
return emptyList()
}
}
代码示例
- 实现日志拓展协议。
iOS:
code-group
Swift
class CustomLogService: KIMLogServiceCapability {
func attachLogFilePaths() -> [String]? {
// 返回需要额外附加的日志路径
let extraLogPaths = ["\(NSHomeDirectory())"]
return extraLogPaths
}
}
Android:
code-group
Kotlin
class KIMExpMultipleLogImpl : KIMExpMultipleLog() {
override fun attachLogFilePaths() :List<String>?{
// 返回需要额外附加的日志路径
return extraLogPaths
}
}
2、注册协议实现对象。
iOS:
code-group
Swift
class KIMExtensionAppDelegate: KIMLifecycleProtocol {
let customLogService = CustomLogService()
required init() { }
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) {
KIMInject.register(customLogService, KIMLogServiceCapability.self)
}
}
Android:
code-group
Kotlin
class XxxApplication : KIMSdkApplication() {
override fun confMeatsOnBone(): KConf<Meat> {
return kConfOf(
KIMExpMultipleLog::class.java confTo KIMExpMultipleLogImpl::class.java,
)
}
}