我正在将CocoaLumberjack与DDASLLogger一起使用,以获取ASL的日志条目,并且
我想有一个日志,同时包含来自3:rd party的misc NSLog:ed输出和我自己的
日志也记录在同一日志中。
为了获得更好的图片,我提取了对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读取(不提供完整的aslate-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然后以这种方式阅读它是不可能的吗?
谢谢,
克莱斯
最佳答案
如果您使用的是Swift,则有一个名为CleanroomASL的新开源项目,该项目提供了用于读取和写入Apple System Log条目的类型安全的API。
在日志中查询给定的.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 Simulator和iOS设备上ASL行为之间的进一步区别是explained here。
关于ios - 提取由ask_log编写的ASL日志条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16068095/