diff --git a/modules/base/src/log_sink.hh b/modules/base/src/log_sink.hh index b021f8f3176946a99db8b8dd9afa8e812ceeba18..5710168eca54ca44098c65232fd017f2c1764805 100644 --- a/modules/base/src/log_sink.hh +++ b/modules/base/src/log_sink.hh @@ -31,9 +31,9 @@ namespace ost { -namespace { +namespace impl{ - class DevNull: public std::streambuf { + class DLLEXPORT DevNull: public std::streambuf { protected: virtual int_type overflow(int_type c) {return c;} virtual std::streamsize xsputn(const char* s, std::streamsize num) {return num;} @@ -41,7 +41,7 @@ namespace { } // anon ns -class DLLEXPORT_OST_BASE LogSink { +class DLLEXPORT LogSink { public: LogSink(){}; virtual ~LogSink() { } @@ -50,18 +50,21 @@ public: typedef boost::shared_ptr<LogSink> LogSinkPtr; -class DLLEXPORT_OST_BASE NullLogSink : public LogSink { +class DLLEXPORT NullLogSink : public LogSink { public: - NullLogSink():null_(new DevNull()){} + NullLogSink():null_(new impl::DevNull()){} virtual void LogMessage(const String& message, int severity){null_ << message;} - + ~NullLogSink(){ + null_.flush(); + delete null_.rdbuf(); + } private: std::ostream null_; }; typedef boost::shared_ptr<NullLogSink> NullLogSinkPtr; -class DLLEXPORT_OST_BASE StdLogSink : public LogSink { +class DLLEXPORT StdLogSink : public LogSink { public: StdLogSink(std::ostream& stream):stream_(stream){} virtual void LogMessage(const String& message, int severity){ @@ -72,7 +75,7 @@ private: std::ostream& stream_; }; -class DLLEXPORT_OST_BASE FileLogSink : public LogSink { +class DLLEXPORT FileLogSink : public LogSink { public: FileLogSink(const String& file_name):stream_(file_name.c_str(), std::ios::out){} virtual void LogMessage(const String& message, int severity){ @@ -83,7 +86,7 @@ public: } ~FileLogSink(){ - stream_.close(); + stream_.flush(); } private: std::ofstream stream_;