Для iPhone-приложения мне нужно собрать отладочные данные в файл, который будет отправлен в онлайн-службу для анализа. Это отлично работает, отвлекая вывод stderr
на дескриптор файла и при необходимости отправляя файл. (NSLog
выход также заканчивается в stderr
, поэтому это работает по всем направлениям.) Тот же метод также отлично работает с stdout
.Swift stderr и stout в один файл
Вот как я делаю сохранение в файл:
freopen(cStringFilePath, "a+", stderr) // or stdout
выше правильно возвращает UnsafeMutablePointer<FILE>
, который я храню след, чтобы закрыть файл, когда это необходимо.
Однако, я должен был бы содержание обоих stdout
и stderr
в один файл, с правильной линией временной последовательности по линии.
Причина в том, что я пытаюсь отладить стороннюю структуру, которая производит диагностический вывод, но записывает ее в stdout
, а не в stderr
.
Любая идея, как это сделать?
Нет, кажется, он захватит только тот, который вы использовали последним. – Mundi
Исправление. Кажется, это работает. Вау. Но это безопасно? Что делать, если два потока пытаются получить доступ к файлу в одно и то же время? – Mundi
Да, это должно быть «безопасно», т. Е. Оно не должно терпеть крах, но вы можете получить выходной чередованный из-за правил буферизации. Я думаю, вы можете изменить, как буферизация происходит в этих файловых дескрипторах, но я не уверен, как с головы. –