我正在使用:
#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
..将NSLog重定向到一个文件,这个文件很有用。
我想记录文件,我的应用程序的用户可以打开和关闭..所以有人知道我如何将NSLog / stderr 重定向到到控制台吗?
谢谢!
答案 0 :(得分:15)
这取自 http://www.atomicbird.com/blog/2007/07/code-quickie-redirect-nslog
// Save stderr so it can be restored.
int stderrSave = dup(STDERR_FILENO);
// Send stderr to our file
FILE *newStderr = freopen("/tmp/redirect.log", "a", stderr);
NSLog(@"This goes to the file");
// Flush before restoring stderr
fflush(stderr);
// Now restore stderr, so new output goes to console.
dup2(stderrSave, STDERR_FILENO);
close(stderrSave);
// This NSLog will go to the console.
NSLog(@"This goes to the console");
答案 1 :(得分:4)
这没有明确回答你的问题,但是如果你需要重定向就是NSLog的输出,那么我会考虑在NSLog()周围使用一个包装器并决定是否发送到文件或基于NSLog / stderr的常规一个你可以控制的标志。
(对我来说,从根本上重定向stderr流来实现这一点感觉就像一个令人惊讶的设计 - 并且在NSLog级别之上使用包装器,如果你想要的话,你可以很容易地选择将输出发送到两个地方。 )