Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
登录到iPhone上的文件_Iphone_Logging_Nslog - Fatal编程技术网

登录到iPhone上的文件

登录到iPhone上的文件,iphone,logging,nslog,Iphone,Logging,Nslog,在iPhone应用程序中将日志语句写入文件或数据库的最佳方式是什么 理想情况下,可以使用freopen()将NSLog()输出重定向到一个文件,但我看到一些报告称它不起作用。有没有人已经这样做了,或者有什么想法可以最好地做到这一点 谢谢 我已成功地在手机上使用freopen(…)将输出重新定向到我自己的文件。如果要使用Cocoa,NSString和NSData具有读取/写入文件的方法,NSFileManager为您提供文件操作。以下是一个示例(应适用于iPhone): 此代码适用于我: - (v

在iPhone应用程序中将日志语句写入文件或数据库的最佳方式是什么

理想情况下,可以使用freopen()将NSLog()输出重定向到一个文件,但我看到一些报告称它不起作用。有没有人已经这样做了,或者有什么想法可以最好地做到这一点


谢谢

我已成功地在手机上使用freopen(…)将输出重新定向到我自己的文件。

如果要使用Cocoa,NSString和NSData具有读取/写入文件的方法,NSFileManager为您提供文件操作。以下是一个示例(应适用于iPhone):


此代码适用于我:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
#if TARGET_IPHONE_SIMULATOR == 0
    freopen([@"/tmp/my_logs.txt" fileSystemRepresentation], "w", stderr);
#endif
}

这段代码对我来说非常有用

#if TARGET_IPHONE_SIMULATOR == 0
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
    freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
#endif
然后,您可以使用此处概述的方法从iphone上获取日志文件


请注意,使用freopen将停止XCODE中的控制台工作。。但是,由于某些原因,您可以在xcode的Organizer中查看的控制台仍然工作得很好。

考虑使用。它是一个轻巧但灵活的实用程序,可以替代NSLog功能。在我看来,它与Log4J在同一个类中,允许定制appender等。例如,它有一个SQLite记录器。

你还记得你使用了哪些参数吗?我使用了freopen([newFileName UTF8String],“w+”,stderr),它将所有控制台输出重定向到logFileName。只是为了跟进-这很好。唯一令人不快的是,在调用freopen后,NSLog输出停止出现在控制台上,但这是一个相当小的问题。您可以使用
isatty()
检查STDERR\u FILENO是否附加到tty,并选择不重定向到文件。当您通过Xcode运行应用程序时(或者当它连接到调试器时,我猜)。这可能是您唯一需要控制台输出的时候了。我已经能够解决Xcode问题,但只有在应用程序未从Xcode运行时,才可以通过检查我选择的环境变量(由Xcode设置)来重定向。例如:
if(getenv(“MY_ENV_VAR”)==NULL){/*调用freopen()*/}
#if TARGET_IPHONE_SIMULATOR == 0
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
    freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
#endif