iPhone:一旦我将NSLog重定向到一个文件,我如何将其恢复到控制台?

iPhone:一旦我将NSLog重定向到一个文件,我如何将其恢复到控制台?,iphone,file,logging,nslog,freopen,Iphone,File,Logging,Nslog,Freopen,我正在使用: #if TARGET_IPHONE_SIMULATOR == 0 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *logPath = [documentsDirectory stri

我正在使用:

#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重定向回控制台吗


谢谢

> P>这并没有明确回答您的问题,但是如果您需要重定向的是NSLO的输出,那么我将考虑在NSALL()周围使用包装器,并决定是否根据您可以控制的一个标志来发送文件或定期NSLCO/STDRR。 (对我来说,从根本上重定向stderr流以实现这一点是一个令人惊讶的设计——使用高于NSLog级别的包装器,如果需要,您可以轻松地选择将输出发送到两个地方。)

这是从


第二个!不要不加选择地重定向stderr!将所有NSLog调用重定向到文件是有充分理由的,例如,如果您需要捕获由内部使用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");