保存日志,然后重定向stdout和stderr

问题描述 投票:0回答:1

编写一个可能在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();
}

我想到了这样的shell脚本,将stdout和stderr重定向到文件,像这样

./myProgram.out 2>> ${date}.err 1>> ${date}.log

但似乎不起作用。与在脚本上没有重定向的情况下执行时的输出相同。

我可以在循环前写那些日志吗?

c++ bash logging stdout stderr
1个回答
0
投票

可以通过以下方式完成:

./myProgram.out > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2)
© www.soinside.com 2019 - 2024. All rights reserved.