众所周知,我们可以在 Objective C 中使用 ASL(Apple System Logger)API 来读取日志,并且使用 asl_search 可以检索特定的应用程序日志。但问题是 asl 的输出不包括创建日志的时间。例如,当您使用 Apple System Logger 打开目录 /var/log 中的 system.log 时,您会看到如下日志:
11 月 28 日 09:19:37 本地主机引导日志 [0]:BOOT_TIME 1354123177 0
但是当用objective C查询asl时,它会报告日志的每个属性,除了创建日志的时间,这意味着在上面提到的例子中,asl_search没有报告11月28日09:19:37
无论如何要包括创建日志的时间在目标 C 中查询 asl?如果这是不可能的,那么检索日志时间的另一种方法是什么?
这是我的代码,请注意我们可以在 /var/log 的 system.log 文件中看到的日志时间不会出现在我的代码输出中。
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
aslmsg q, m;
int i;
const char *key, *val;
q = asl_new(ASL_TYPE_QUERY);
asl_set_query(q, ASL_KEY_SENDER, "bootlog", ASL_QUERY_OP_EQUAL);
aslresponse r = asl_search(NULL, q);
while (NULL != (m = aslresponse_next(r)))
{
NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary];
for (i = 0; (NULL != (key = asl_key(m, i))); i++)
{
NSString *keyString = [NSString stringWithUTF8String:(char *)key];
val = asl_get(m, key);
NSString *string = [NSString stringWithUTF8String:val];
[tmpDict setObject:string forKey:keyString];
}
NSLog(@"%@", tmpDict);
}
aslresponse_free(r);
[pool drain];
return 0;
}