iPhone: После того как я перенаправил NSLog в файл, как я возвращаюсь он к консоли?

Я использую:

#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 назад к консоли?

Спасибо!

8
задан Ben Clayton 20 January 2010 в 16:44
поделиться

2 ответа

Это явно не отвечает на ваш вопрос, но если все, что вам нужно для перенаправления, это вывод NSLog, то я бы рассмотрел с помощью обертки вокруг NSLog () и решить, следует ли отправлять в файл или регулярный NSLOG / STDERR на основе Флаг, который вы держите вокруг, что пользователь может управлять.

(Это похоже на удивительный дизайн для меня, чтобы принципиально перенаправить поток STDERR для достижения этого - и с оберткой над уровнем NSLog вы можете так же легко выбрать для отправки вывода на обоих местах, если вы когда-нибудь хотели. )

4
ответ дан 5 December 2019 в 08:24
поделиться

Это взято из 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");
16
ответ дан 5 December 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: