使用Objective C读取发布到设备控制台的日志消息

Ric*_*ell 31 iphone console logging objective-c ios

我的iOS应用程序如何从设备控制台日志中读取消息.我想以编程方式读取这些日志条目(如读取文件?),选择一些,然后通过电子邮件发送给支持.

我知道有一个iPhone应用程序可以让你查看日志.它的名字是Console.但是,我无法弄清楚他使用了哪些类或API.一个人建议使用ASL功能完成,但我不知道它们是什么或它们被记录在何处.

我也知道使用NSLog的几种替代方法,例如NSLogger和CocoaLumberJack,但我们目前尚未准备好实现这些.

非常感谢您的帮助!

Jul*_*rgé 28

此项目在Cocoanetics博客有样本代码来访问使用ASL公司(Apple系统登录器)API(的iOS系统日志手册页):

aslmsg q, m;
int i;
const char *key, *val;

q = asl_new(ASL_TYPE_QUERY);

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);
Run Code Online (Sandbox Code Playgroud)

请注意,您需要轮询ASL以读取最新消息.在iPhone模拟器上运行时,上面的代码也会失败,但在实际设备上运行正常.

如果您不想与C ASL API对抗,请查看这个名为ASLogger的 Objective-C包装器.

  • 实际上这个代码有问题.在iOS上写入控制台的大多数消息都标记为有意义.只有系统应用才能读取它们.因此,您最终只能读取自己的日志. (2认同)

Tru*_*ung 7

从IOS 7开始,此方法将不再起作用.由于安全原因,Apple删除了对ASL的访问权限.

  • 在iOS 7中,您可以使用ASL读取您自己的应用程序输出的消息,包括以前运行的应用程序的相同版本,但不包括系统或任何其他应用程序输出的消息. (14认同)