我已经通过 spdlog 库更改了我的一个应用程序中的消息记录和打印输出。一切都在我控制的代码中运行。我面临的问题是我无法从 3rd 方库重定向打印输出和其他错误消息。
在库中,std::cout 和 std::cerr 被重定向到名为 errorOut 或 printOut 的中间 std::ostream,它们在库中全局定义为 asextern std::ostream printOut;
并实现为std::ostream library::printOut(std::cout.rdbuf());
我试图将重定向的流更改为 std::ostringstream : std::ostringstream ss; library::printOut.rdbuf(ss.rdbuf());
。然后,我将它用于 spdlog 的接收器,auto sink2 = std::make_shared<spdlog::sinks::ostream_sink_mt> (ss);
并将其组合到组合记录器中。
但是这样做,来自库的错误消息不会像往常一样在 cout/cerr 中打印出来。
因此,如何在不修改这些库的情况下将定义的 ostream 从库重定向/捕获到 spdlog?
感谢您的帮助和投入。