Запись программы, запускаемой в цикле while, может быть, в течение нескольких часов, поэтому я пытаюсь перенаправить cout и cerr для сохранения файлов журнала в каталоге, названном датой начала цикла.
Проблема в том, что яУ меня есть некоторый журнал, который должен быть сохранен перед циклом while, поэтому он записывает перед тем, как я перенаправлю stdout и stderr.
prepareLoop();
std::cout("Some log"); // Log before redirection
while (true)
{
std::string date = getTodaysDate();
// redirect stdout and stderr to log file with date on filename.
std::ofstream logByDate { date + ".log", std::ios::app };
std::ofstream ErrByDate { date + ".err", std::ios::app };
std::cout.rdbuf(logByDate.rdbuf());
std::cerr.rdbuf(ErrByDate.rdbuf());
otherJobsToDo();
}
Я думал о сценарии оболочки, перенаправляющем stdout и stderr в файл, например,
./myProgram.out 2>> ${date}.err 1>> ${date}.log
но, похоже, не работает. Тот же вывод, что и при выполнении без перенаправления в сценарии.
Можно ли записать эти журналы перед циклом?
Сводка: Программа работает в течение нескольких дней. Я должен изменить файл журнала, когда день изменился. Итак, я буду продолжать перенаправлять stdout и stderr в цикле. Но есть некоторые журналы вне цикла, которые должны быть записаны в журнал. И перенаправление при выполнении не записывает их в журнал.