2014-03-26 64 views
2

是否有通过编程访问iPhone崩溃日志文件的方式。我试图编写一个崩溃报告功能,当您在崩溃后启动应用程序时,它会提供将崩溃报告发送到服务器。我找不到如何在应用程序中获取崩溃日志。如何让iPhone应用程序崩溃日志从iPhone文件编程

+0

也许回答了类似的问题的一个可以帮助你记录器类型的NSString:http://stackoverflow.com/questions/4737701/GET-先前运行的崩溃日志上,iphone RQ = 1个 – Christian

+0

检查这一项,可能会有所帮助:?http://stackoverflow.com/questions/9715127/programmatically-getting-crash-reports-inside- an-ios-app –

+0

@Christian thanks.actually我正在制作我自己的调试器库,所以不想使用其他库或框架来做这件事,所以我检查。 – Charlie

回答

2

您可以使用下面的逻辑是相同的。

aslmsg q, m; 
int i; 
const char *key, *val; 
float how_old = fTime ; 
q = asl_new(ASL_TYPE_QUERY); 
asl_set_query(q, ASL_KEY_LEVEL, strLoggerLevel ,ASL_QUERY_OP_LESS_EQUAL); 
asl_set_query(q, ASL_KEY_FACILITY, [@"YourBundleIdOfAPP" UTF8String] ,ASL_QUERY_OP_EQUAL); 

asl_set_query(q, ASL_KEY_TIME, [[NSString stringWithFormat:@"%.f", [[NSDate date] timeIntervalSince1970] - how_old] UTF8String], ASL_QUERY_OP_GREATER_EQUAL); 
int goInside=0; 
aslresponse r = asl_search(NULL, q); 
while (NULL != (m = aslresponse_next(r))) 
{ 
    NSString *cValueToWrite; 
    NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; 

    for (i = 0; (NULL != (key = asl_key(m, i))); i++) 
    { 
     //get the only required fields 
     if(i==12 || i==10 || i==11 || i==8 || i==9 ||i==3) 
     { 
      NSString *keyString = [NSString stringWithUTF8String:(char *)key]; 
      val = asl_get(m, key); 

      NSString *string = [NSString stringWithUTF8String:val]; 
      [tmpDict setObject:string forKey:keyString]; 
     } 
    } 

    cValueToWrite=[[NSString alloc]initWithFormat:@"\n--------------[Debug]----------------\nDateTime: %@\nApplication: %@\nInfo: %@",[tmpDict valueForKey:@"CFLog Local Time"],[tmpDict valueForKey:@"Sender"],[tmpDict valueForKey:@"Message"]]; 
} 

strLoggerLevel是保存要取值范围高达7

+0

可以请你告诉我在你给定的解决方案中用什么来代替fTime,并且我正在实现这个能否解决我的目的? – Charlie

+0

它是一个浮点值,以秒为单位显示时间。意味着你想在1小时前登录,然后使用3600.0 – svrushal

+0

ok.t​​hanks ...所以我可以把调试(级别名称)代替strLoggerLevel获取崩溃日志? – Charlie