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

时间:2011-05-26 20:00:14

标签: iphone objective-c ios logging console

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

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

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

非常感谢您的帮助!

4 个答案:

答案 0 :(得分:28)

Cocoanetics博客中的

This entry提供了使用ASL(Apple System Logger)API(man page)访问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);

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:3)

如果有人正在寻找一个,那么这是一个Swift实现:

static func systemLogs() -> [[String: String]] {
    let q = asl_new(UInt32(ASL_TYPE_QUERY))
    var logs = [[String: String]]()
    let r = asl_search(nil, q)
    var m = asl_next(r)
    while m != nil {
        var logDict = [String: String]()
        var i: UInt32 = 0
        while true {
            if let key = String.fromCString(asl_key(m, i)) {
                let val = String.fromCString(asl_get(m, key))
                logDict[key] = val
                i++
            } else {
                break
            }
        }
        m = asl_next(r)
        logs.append(logDict)
    }
    asl_release(r)
    return logs
}

答案 3 :(得分:0)

人们建议在iOS 9之前完成工作的旧方式,但这不适用于iOS 10 / XCode8。

在iOS10 / XCode8,统一记录和活动追踪中引入了一种新的记录方式。

https://developer.apple.com/reference/os/1891852-logging#1682426 https://developer.apple.com/videos/play/wwdc2016/721/

将此用于记录:

https://github.com/SRGSSR/srglogger-ios