我在C ++项目中使用google logger(glog),其中源代码包含信息项和进度的打印输出:
std::cout << some_useful_stuff << "\n";
我可以使用GLOG记录信息项目:
LOG(INFO) << some_useful_stuff << "\n"; \\ gets echoed to stdout
我无法更改整个代码库中的所有std::cout
语句(因为我使用了来自第三方的某些子语句等,并且无法将自己的日志语句添加到它们< / em>),这阻止我使用if-else结构(无论如何都会很难看,将每个输出语句包装在逻辑中)。
那么我怎样才能将stdout
输出复制到GLog?
std::cout << some_useful_stuff << "\n"; \\ message also goes to LOG(INFO)
可能有用:我实际上并不需要同时发生这种情况;选择像{CONSOLE,LOGS,BOTH}这样的选择很有用,但我可以在{CONSOLE,LOGS}之间做出更简单的选择。
另外 - 经验丰富的程序员,但C ++新手,所以如果这是超级简单;道歉 - 并提前感谢!
答案 0 :(得分:0)
不确定glog,但通常我们使用dup2系统调用将一个文件处理程序的输出重定向到另一个。
例如在你的情况下,让所有std :: cout写入glog使用的日志文件只做
DUP2(glog_file_handler,标准输出);
如果您可以获取glog写入的日志文件的文件句柄,这将有用。有关详细信息,请参阅http://man7.org/linux/man-pages/man2/dup.2.html。
希望这有帮助。
P.S。如果您的程序有多个线程/进程写入相同的glog文件并且glog确实将写入同步到日志文件
,那么这将无法工作