我正在使用带有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然后以这种方式阅读?
谢谢, 克拉斯
答案 0 :(得分:0)
如果您正在使用Swift,那么有一个名为CleanroomASL的新开源项目,它提供了一个类型安全的API,用于读取和写入Apple System Log条目。
查询给定.Sender
的日志(假设productName
为String
或NSString
):
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。