我在应用程序委托 onfinishedlaunchingwithoptions 方法中使用以下几行来尝试将 NSLog 输出重定向到文件。这是许多 SO 答案中的代码。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"mylog.txt"];
freopen([logPath fileSystemRepresentation],"a+",stderr);
文件正在创建,但它是空的。另外,据我了解,这应该会阻止 NSLog 消息出现在 XCode 控制台中,但它们仍然会出现。
感谢所有帮助。
以下源代码创建一个名为 MyLog() 的 C 函数。您需要在项目中内联包含此函数并像 NSLog() 一样调用它,即 MyLog(@"Some text."); 。然后,该函数中的字符串将写入您的日志文件。它只写入单个字符串,并且每次使用时都会覆盖日志文件。
void MyLog( NSString *formatString, ... ) {
va_list ap;
va_start( ap, formatString );
NSString *format = [[NSString alloc] initWithFormat:@"%@\n", formatString];
NSString *string = [[NSString alloc] initWithFormat:format arguments:ap];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"mylog.txt"];
NSData* data = [string dataUsingEncoding:NSUTF8StringEncoding];
[[NSFileManager defaultManager] createFileAtPath:logPath contents:data attributes:nil];
va_end( ap );
}