diff --git a/modules/base/pymod/export_logger.cc b/modules/base/pymod/export_logger.cc index f23e0871434a4e3dafd7baa55132f43d34fdc17d..91eccbdec2922ab4b5c1167ef48c3ef6d1d8e301 100644 --- a/modules/base/pymod/export_logger.cc +++ b/modules/base/pymod/export_logger.cc @@ -156,6 +156,12 @@ void export_Logger() .def("LogMessage", &FileLogSink::LogMessage) ; + class_<StringLogSink, StringLogSinkPtr, bases<LogSink>, + boost::noncopyable >("StringLogSink", init<>()) + .def("LogMessage", &StringLogSink::LogMessage) + .def("GetLog", &StringLogSink::GetLog) + ; + def("PushVerbosityLevel",push_verb); def("PopVerbosityLevel",pop_verb); def("GetVerbosityLevel",get_verb); diff --git a/modules/base/src/log_sink.hh b/modules/base/src/log_sink.hh index 6cf939201e2cb901e8e8957103580919e172b5e5..f06d4ae1c6221c0691a5715cc60bc355b4344431 100644 --- a/modules/base/src/log_sink.hh +++ b/modules/base/src/log_sink.hh @@ -20,6 +20,7 @@ #define OST_LOG_SINK_HH #include <ostream> +#include <sstream> #include <iostream> #include <fstream> #include <stack> @@ -51,6 +52,23 @@ private: std::ostream& stream_; }; +class DLLEXPORT StringLogSink : public LogSink { +public: + StringLogSink():LogSink(),stream_(){} + virtual void LogMessage(const String& message, int severity){ + stream_ << message; + } + String GetLog() const + { + return stream_.str(); + } + +private: + std::ostringstream stream_; +}; + +typedef boost::shared_ptr<StringLogSink> StringLogSinkPtr; + class DLLEXPORT FileLogSink : public LogSink { public: FileLogSink(const String& file_name):stream_(file_name.c_str(), std::ios::out){}