diff --git a/cpp/src/arrow/util/logging.cc b/cpp/src/arrow/util/logging.cc index 993c5306ca4..15e3369dcde 100644 --- a/cpp/src/arrow/util/logging.cc +++ b/cpp/src/arrow/util/logging.cc @@ -24,6 +24,7 @@ #endif #include #include +#include #ifdef ARROW_USE_GLOG @@ -67,7 +68,7 @@ class CerrLog { virtual ~CerrLog() { if (has_logged_) { - std::cerr << std::endl; + std::cerr << buffer_.str() << std::endl; } if (severity_ == ArrowLogLevel::ARROW_FATAL) { PrintBackTrace(); @@ -77,14 +78,14 @@ class CerrLog { std::ostream& Stream() { has_logged_ = true; - return std::cerr; + return buffer_; } template CerrLog& operator<<(const T& t) { if (severity_ != ArrowLogLevel::ARROW_DEBUG) { has_logged_ = true; - std::cerr << t; + buffer_ << t; } return *this; } @@ -92,6 +93,7 @@ class CerrLog { protected: const ArrowLogLevel severity_; bool has_logged_; + std::ostringstream buffer_; void PrintBackTrace() { #ifdef ARROW_WITH_BACKTRACE