不是標(biāo)題黨,至少在我看來(lái)NSLog前面用來(lái)輸出時(shí)間簡(jiǎn)直是渣得一逼,還要占一大串沒(méi)用的字符,渣!
- 改良后的輸出格式: 距離上次輸出日志的時(shí)差(用于粗略計(jì)算方法運(yùn)行時(shí)間), 線(xiàn)程ID(查看是否異步), 方法(精確調(diào)試), 方法名(類(lèi)方法或是實(shí)例方法) 行號(hào)
- 實(shí)現(xiàn)思路很簡(jiǎn)單,就不貼完整代碼了, 貼個(gè)日志根據(jù)自己需求定制便是(本人日志不但輸出,還以以SQLite保存,方便隨時(shí)查詢(xún))
time: 0.001133, tid:01 0x0000000103fe5265 +[Reachability reachabilityForInternetConnection] + 37
time: 0.000027, tid:01 0x0000000103fe51bb +[Reachability reachabilityWithAddress:] + 27
time: 0.000014, tid:01 0x0000000103fe537b -[Reachability initWithReachabilityRef:] + 27
time: 0.000012, tid:01 0x0000000103fe5265 +[Reachability reachabilityForInternetConnection] + 37
time: 0.000007, tid:01 0x0000000103fe51bb +[Reachability reachabilityWithAddress:] + 27
time: 0.000008, tid:01 0x0000000103fe537b -[Reachability initWithReachabilityRef:] + 27
time: 0.000008, tid:01 0x0000000103fe5cf7 -[Reachability currentReachabilityStatus] + 23
time: 0.000006, tid:01 0x0000000103fe5967 -[Reachability isReachable] + 23
time: 0.000679, tid:01 0x0000000103fe58da -[Reachability isReachableWithFlags:] + 26
time: 0.000030, tid:01 0x0000000103fe5a87 -[Reachability isReachableViaWiFi] + 23
- (void)log: (SCLoggerBlock)block
{
NSTimeInterval now = [NSDate nowTimeStamp];
NSThread *thread = [NSThread currentThread];
NSArray *stacks = [NSThread callStackSymbols];
NSTimeInterval delta = now - _lastTime;
_lastTime = now;
dispatch_async(_queue, ^{
block(thread, stacks, delta);
});
}
void sc_LogFunctionName()
{
static SCLogger *logger = nil;
static NSString *logTableName = nil;
static FMDatabase *logDB = nil;
if (nil == logger)
{
logger = [[SCLogger alloc] init];
logTableName = [[NSDate date] dateStringWithFormat:@"YYYY-MM-dd HH_mm_ss"];
NSString *path = upload_log();
logDB = [FMDatabase databaseWithPath:path];
[logDB open];
[logDB createTable:logTableName fromTypeList:@{
@"index":@"integer PRIMARY KEY autoincrement",
@"deltaTime":kDBColumnTypeFloat,
@"tid":kDBColumnTypeInteger,
@"text":kDBColumnTypeText
}];
MLog(@"LogDB: %@", path);
UIDevice *dev = [UIDevice currentDevice];
NSDictionary *info = @{
@"name":dev.name,
@"model":dev.model,
@"localizedModel":dev.localizedModel,
@"systemName":dev.systemName,
@"systemVersion":dev.systemVersion,
@"identifierForVendor":dev.identifierForVendor.UUIDString,
};
NSString *device = [info toJsonString];
[logDB insertDataWithTable:logTableName columnData:@{@"text":device}];
}
[logger log:^(NSThread *thread, NSArray *stacks, NSTimeInterval deltaTime) {
NSString *stack = stacks[2];
NSString *method = [stack substringFromIndex:40];
NSString *log = [NSString stringWithFormat:@"time: %lf, tid:%02d %@",
deltaTime,
thread.seqNumber,
method];
printf("%s\n", [log cStringUsingEncoding:NSUTF8StringEncoding]);
[logDB insertDataWithTable:logTableName columnData:@{
@"deltaTime":@(deltaTime),
@"tid":@(thread.seqNumber),
@"text":method,
}];
}];
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者