提取ask_log写入的ASL日志条目

时间:2013-04-17 19:04:48

标签: ios logging

我正在使用带有DDASLLogger的CocoaLumberjack来获取ASL的日志条目,以及 我想要一个带有misc NSLog:ed输出来自3:rd party和我自己的日志 也记录在同一个日志中。

为了获得更好的画面,我提取了对ASL的调用并做了一个例子。 我遇到的问题是这个ASL提取方法只能找到条目 用NSLog编写,而不是 asl_log

以下是管理器控制台的示例:

Apr 17 20:34:48 Claes-Ls-iPhone-4s ASLLogTest[7253] <Warning>: NSLog 7
Apr 17 20:34:51 Claes-Ls-iPhone-4s ASLLogTest[7253] <Critical>: ASLLog 7

提取时,我只获得NSLog行。

以下是使用的代码:

写入ASL:

NSDictionary *infoDictionary = [NSBundle mainBundle].infoDictionary;
NSString *productName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
_client = asl_open(productName.UTF8String, "com.apple.console", 0);
int status = asl_log(_client, NULL, ASL_LEVEL_CRIT, "%s", string.UTF8String);

从ASL读取(不提供完整的iterate-through-asl,但它有效):

// Using ASL_QUERY_OP_TRUE to be dead-sure.
q = asl_new(ASL_TYPE_QUERY);
asl_set_query(q, ASL_KEY_SENDER, productName.UTF8String, ASL_QUERY_OP_TRUE);
aslresponse r = asl_search(NULL, q);

我缺少什么,是不可能写到ASL然后以这种方式阅读?

谢谢, 克拉斯

1 个答案:

答案 0 :(得分:0)

如果您正在使用Swift,那么有一个名为CleanroomASL的新开源项目,它提供了一个类型安全的API,用于读取和写入Apple System Log条目。

查询给定.Sender的日志(假设productNameStringNSString):

let client = ASLClient()
let query = ASLQueryObject()
query.setQueryKey(.Sender, value: productName, operation: .EqualTo, modifiers: .None)

client.search(query) { record in
    if let record = record {
        // we've gotten a log entry for the search.
        // 'record' is of type ASLQueryObject.ResultRecord
    }
    else {
        // there are no more log entries to process
    }
    // return true while we still want to get results
    // or return false when we don't want to process more
    return true
}

注意:在iOS设备上,ASL将返回您的流程生成的日志条目。此外,日志被相当积极地修剪,并且可能仅包括当前运行的应用程序所做的条目。 Mac / iOS模拟器和iOS设备上的ASL行为之间的进一步差异为explained here