本文详细介绍终端性能监控 Pro 日志 SDK 的功能接口,帮助您更加灵活、深度地使用日志 SDK。
SDK 日志打印模块说明
SDK 内置的打印日志能力基于微信 Mars-xlog 方案,对外提供能力在 TDLoggingIMPProtocol(TDOS_Diagnose/Classes/LogReport/TDLoggingIMPProtocol.h) 中定义,主要包含如下本地日志打印、日志染色、日志文件获取等功能,使用方法如下。
// 头文件#import <TDOS_Diagnose/TDOSLoggerProxy.h>// 初始化方式:@interface TDOSLogger : NSObject <TDLoggingIMPProtocol>/// 根据配置初始化日志SDK/// @param config 配置- (instancetype)initWithConfig:(TDOSLoggerConfig *)config;@end// 其中,TDOSLoggerConfig配置包含如下可选设置项:/// 日志目录@property (nonatomic, readonly) NSString *logPath;/// 默认日志级别,默认RAFTLogLevel_Error@property (nonatomic, readonly) RAFTLogLevel defaultLogLevel;/// 加密Key@property (nonatomic, readonly) NSString *publicKey;/// 控制台是否输出,默认关闭@property (nonatomic, assign) BOOL enableConsoleLog;/// 日志文件名前缀(可选设置)@property (nonatomic, copy) NSString *logFilePrefix;
关于能力的说明请参见如下内容。
基础能力
包含打印日志、设置日志级别、强制日志落地等。其中日志级别遵循 RAFT 日志定义—— RAFTLogDef(Log/RAFTLogDef.h) ,提供7个级别。
RAFTLogLevelVerbose = 0,RAFTLogLevelDebug = 1,RAFTLogLevelInfo = 2,RAFTLogLevelWarn = 3,RAFTLogLevelError = 4,RAFTLogLevelFatal = 5,RAFTLogLevelNone = 6,
在此基础上,TDOS_DiagnoseSDK 提供了5个宏定义,以便业务快速接入。这些宏定义在 TDOSLoggerProxy 中,如下所示:
#define TDLogDebug(tag, format, ...)#define TDLogInfo(tag, format, ...)#define TDLogWarn(tag, format, ...)#define TDLogError(tag, format, ...)#define TDLogFatal(tag, format, ...)
原始具体接口如下所示:
/// 打印日志接口(不带格式化字符串)- (void)log:(RAFTLogLevel)leveltag:(NSString *)tagfile:(const char *)filefunc:(const char *)funcline:(int)linemsg:(NSString *)msg;/// 打印日志接口(带格式化字符串)- (void)log:(RAFTLogLevel)leveltag:(NSString *)tagfile:(const char *)filefunc:(const char *)funcline:(int)lineformat:(NSString *)format, ... __attribute__((format(__NSString__, 6, 7))) NS_REQUIRES_NIL_TERMINATION;/// 获取当前是否处于染色状态- (BOOL)isColorState;/// 重置染色级别- (void)resetColorLevel;/// 设置Log打印级别/// @param level 日志级别- (void)setLogLevel:(RAFTLogLevel)level;/// 设置打印log的特殊级别, 以及特殊级别的过期时间/// @param level 日志级别/// @param endtime 结束时间- (void)setLogLevel:(RAFTLogLevel)level endTimestamp:(time_t)endtime;/// 强制写入日志到文件/// @param isSync 是否同步写入- (void)flushLog:(BOOL)isSync;
更多日志设置能力
包含设置本地日志最大保留时间(默认10天)、设置本地保留的最大日志总量、设置控制台日志输出、设置日志落地时机等。
/// 设置日志最大存留时间/// @param time 单位s,默认10(10*24*60*60)天- (void)setMaxLogAliveTime:(long)time;/// 设置总的日志文件大小,超出即清理(底层限制最小50M)/// @param maxSize 总文件大小,默认为0不限制- (void)setMaxTotalLogFileSize:(int64_t)maxSize;/// 设置控制台log输出/// @param enabled 是否开启- (void)setConsoleLogEnabled:(BOOL)enabled;
日志信息获取
获取指定时间范围内的小时级日志文件列表(含大小限制功能)、日志文件夹路径及日志加密公钥。
/// 获取日志列表(按小时打印)/// @param startTime 开始时间戳/// @param endTime 结束时间戳- (nullable NSArray<NSString *> *)getPeroidLogFilesWithStartTime:(NSTimeInterval)startTimeendTime:(NSTimeInterval)endTime;/// 获取日志列表,支持限定最大日志量/// (超过大小优先丢弃旧文件)////// @param startTime 开始时间戳/// @param endTime 结束时间戳/// @param sizeLimit 最大日志包- (nullable NSArray<NSString *> *)getPeroidLogFilesWithStartTime:(NSTimeInterval)startTimeendTime:(NSTimeInterval)endTimesizeLimit:(unsigned long long)sizeLimit;/// 获取日志文件夹路径。- (NSString *)getLogFolderPath;/// 获取日志加密公钥- (nullable NSString *)getLogEncryptPublicKey;
主动触发拉取捞日志命令(Push,可选)
业务可以结合自身 App 的 Push 通道,触发主动拉取捞日志命令。通过业务自身的 Push 能力,可更及时收到日志捞取命令,减少等待时间。
注意:
业务自身 Push 下发能力需要与平台进行对接,或在新建查询后,主动触发一次对应指令。
客户端在收到 Push 命令后,需主动调用 TDOS_Diagnose SDK 的如下接口,实现及时请求捞日志配置。
/// 主动拉取捞日志命令////// 调用场景:如收到Push消息时- (void)requestLogConfigFromServer;// 调用示例:#import <TDOS_Diagnose/TDOS_Diagnose.h>[TDLogSDK.sharedInstance requestLogConfigFromServer];