如何使用Objective-C在IOS中读取和存储系统日志消息

如何使用Objective-C在IOS中读取和存储系统日志消息,ios,objective-c,logging,nslog,Ios,Objective C,Logging,Nslog,我的目的是读取与我的应用程序相关的所有系统日志消息(system.log文件中的所有日志消息),并将其存储在应用程序文档文件夹中的日志文件中。 我通过并使用了 这是我的密码: NSDate *currentDate = [[NSDate alloc] init]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:[NSString stringWithFormat: @"

我的目的是读取与我的应用程序相关的所有系统日志消息(system.log文件中的所有日志消息),并将其存储在应用程序文档文件夹中的日志文件中。 我通过并使用了

这是我的密码:

NSDate *currentDate = [[NSDate alloc] init];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:[NSString stringWithFormat: @"dd-MM-yyyy-HHmmss"]];

NSString *logFileName = [[formatter stringFromDate:currentDate] stringByAppendingString:@".log"];

NSError *error;
NSMutableString *content = [[NSMutableString alloc] init];


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

 q = asl_new(ASL_TYPE_QUERY);

 aslresponse r = asl_search(NULL, q);

 while (NULL != (m = asl_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];
     }

     [content appendString:[NSString stringWithFormat:@"%@",tmpDict]];
 }

asl_release(r);

NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:logFileName];

[[NSString stringWithString:content] writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
这只是我的IOS应用程序代码的一部分。我正在IOS模拟器上运行我的应用程序

日志文件已成功创建。它有一些主要是JSON的内容

但是,该文件没有我通过NSLog输出的那些日志消息,但是这些日志消息存在于系统的日志文件中

我对IOS开发非常陌生。如上所述,我的目的是访问系统的日志文件。所以我想捕获每个日志消息并将其保存到我的个人目录中

我在这上面搜索了很多。然而,我还没有找到确切的线索,可以帮助我在这方面。有人能适当地指导我吗?
(我希望这个问题不会重复。)

我想你希望他们稍后检查,以防你发现错误。也许你可以试试Bugfender(),它是我们创建的一个工具,用于在开发应用程序时从客户那里获取日志

有了它,您还可以获得所有NSLog调用


如果您不想使用Bugfender,那么您检查的答案是正确的方法。在我们的例子中,我们使用的是文档中记录的函数,我想您希望他们稍后检查这些函数,以防发现错误。也许你可以试试Bugfender(),它是我们创建的一个工具,用于在开发应用程序时从客户那里获取日志

有了它,您还可以获得所有NSLog调用


如果您不想使用Bugfender,那么您检查的答案是正确的方法。在我们的例子中,我们正在使用文档中记录的函数

为什么不使用自定义日志函数来保存日志?@SolaWing您的意思是,我应该为此编写自己的函数吗?嗯,这主意不错。但我仍然想知道,我如何访问system.log文件?为什么不使用自定义日志函数来保存日志?@SolaWing你的意思是,我应该为此编写自己的函数吗?嗯,这主意不错。但我仍然想知道,我如何访问system.log文件?请注意,未来的读者注意,这里引用的
asl
函数从iOS 10.0开始就被弃用,取而代之的是
os_log
函数()请注意,从iOS 10.0开始,此处引用的
asl
函数已被弃用,并由
os\u log
函数()取代