@@ -161,6 +161,9 @@ class LogCapture
161161 mLogger ->set_level (spdlog::level::trace);
162162 mLogger ->flush_on (spdlog::level::trace);
163163 spdlog::set_default_logger (mLogger );
164+ // Capture third-party warnings that log directly to stdout/stderr.
165+ mOldCout = std::cout.rdbuf (mStream ->rdbuf ());
166+ mOldCerr = std::cerr.rdbuf (mStream ->rdbuf ());
164167#else
165168 mOldCout = std::cout.rdbuf (mStream .rdbuf ());
166169 mOldCerr = std::cerr.rdbuf (mStream .rdbuf ());
@@ -175,6 +178,10 @@ class LogCapture
175178 spdlog::set_default_logger (mPreviousLogger );
176179 if (mLogger )
177180 spdlog::drop (mLogger ->name ());
181+ if (mOldCout )
182+ std::cout.rdbuf (mOldCout );
183+ if (mOldCerr )
184+ std::cerr.rdbuf (mOldCerr );
178185#else
179186 std::cout.rdbuf (mOldCout );
180187 std::cerr.rdbuf (mOldCerr );
@@ -200,6 +207,8 @@ class LogCapture
200207 std::shared_ptr<spdlog::sinks::ostream_sink_mt> mSink ;
201208 std::shared_ptr<spdlog::logger> mPreviousLogger ;
202209 std::shared_ptr<spdlog::logger> mLogger ;
210+ std::streambuf* mOldCout {nullptr };
211+ std::streambuf* mOldCerr {nullptr };
203212#else
204213 std::ostringstream mStream ;
205214 std::streambuf* mOldCout ;
0 commit comments