我想从iOS 10读取控制台日志

时间:2016-09-07 06:43:39

标签: ios10

我正在使用此代码,但由于更改了与Logging System相关的所有API,因此它不再适用于iOS 10。

+ (NSString *)getConsoleLog {
NSString *consoleLog = @"";
char fdate[24];

NSString *myPID = [NSString stringWithFormat:@"%d", getpid()];
aslmsg query, msg;
query = asl_new(ASL_TYPE_QUERY);
asl_set_query(query, ASL_KEY_PID, myPID.UTF8String, ASL_QUERY_OP_EQUAL);
aslresponse r = asl_search(NULL, query);

while ((msg = aslresponse_next(r))) {
    NSString *secondsString = [NSString stringWithFormat:@"%s", asl_get(msg, ASL_KEY_TIME)];
    NSString *nanoSecondsString = [NSString stringWithFormat:@"%s", asl_get(msg, ASL_KEY_TIME_NSEC)];

    NSTimeInterval seconds = [secondsString doubleValue];
    NSTimeInterval nanoSeconds = [nanoSecondsString doubleValue];
    NSTimeInterval msgTime = seconds + nanoSeconds / NSEC_PER_SEC;

    time_t timestamp = (time_t)msgTime;
    struct tm *lt = localtime(&timestamp);
    strftime(fdate, 24, "%Y-%m-%d %T", lt);

    consoleLog = [consoleLog stringByAppendingFormat:@"%s.%03d %@\n", fdate, (int)(1000.0 * (msgTime - floor(msgTime))), [NSString stringWithFormat:@"%s", asl_get(msg, ASL_KEY_MSG)]];
}

aslresponse_free(r);
asl_free(query);

return consoleLog; }

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

从iOS 10开始NSLog重定向到新的日志记录系统,并且没有搜索API。

From the WWDC 2016 Session 721 - Unified Logging and Activity Tracing
" ...所有遗留API,NSLog,asl日志,消息系统日志,所有这些将被重定向到新系统。 ...但是如果您只是使用新系统进行构建,那么开箱即用它将全部引导到新的日志记录架构中。"

Time 41:47"首先,所有ASL日志记录API现在都被这些新API取代,因此不推荐使用这些旧API。但是有一个有趣的边缘情况。在此版本中,不会公开用于搜索日志数据的新API。这意味着没有与asl搜索功能相当的东西。如果您绝对依赖系统中的asl搜索,那么可能是等待采用新的日志系统的原因。还有一些来自被弃用的活动的API。"