NSLog () для консоли и файла - PullRequest
25 голосов
/ 08 марта 2012

Я бы хотел перенаправить NSog() в файл, но все равно увидеть вывод в консоли.Я знаю, что stderr можно перенаправить в файл, используя:

freopen("file.log", "a+", stderr);

, но после перенаправления его в файл журнал больше не отображается в выводе консоли.

Я мог бы построитьпользовательская оболочка вокруг NSLog(), но я не получал бы зарегистрированные журналы аварий, которые записываются в stderr в момент сбоя приложения.

Я также экспериментировал с dup() и другими методами для дублирования файловых дескрипторов, но вывод был простым в файле или в консоли, а не в обоих.

Здесь задавались похожие вопросы: Запись stderr на iPhone в файл и консоль , но без принятого ответа или спредложение использовать оболочку NSLog ().

Кто-нибудь знает, как управлять этой работой?Заранее спасибо.

ОБНОВЛЕНИЕ: Самая важная часть перенаправления заключается в том, чтобы журналы системных ошибок ( stderr ) записывались как в консоль, так и в файл.

Ответы [ 2 ]

29 голосов
/ 08 марта 2012

Мы реализовали способ:

if (!isatty(STDERR_FILENO)) {
    // Redirection code
}

Это основано на общем предположении, что если консоль подключена, вам не нужно сохранять эти журналы в файле, так как вы уже отлаживаете.Поэтому, когда консоль подключена, журналы будут там распечатываться, в противном случае сохраняются в файл.

8 голосов
/ 08 марта 2012

Согласно документам , вам понадобится настраиваемое средство ведения журнала.

Вам потребуется как минимум функция, которая принимает переменные аргументы и printd для NSLog и fprintf, что-то вроде:

void myLog(NSString* format, ...)
{
    va_list argList;
    va_start(argList, format);
    NSString* formattedMessage = [[NSString alloc] initWithFormat: format arguments: argList];
    va_end(argList);
    NSLog(@"%@", formattedMessage);
    fprintf(myFileDescriptor, "%s\n", [formattedMessage UTF8String]);
    [formattedMessage release]; // if not on ARC
}

Или существуют каркасы ведения журнала какао.

Ищем специальную платформу ведения журнала какао

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...