Eris  1.3.19
LogStream.h
00001 #ifndef ERIS_LOGSTREAM_H
00002 #define ERIS_LOGSTREAM_H
00003 
00004 #include <Eris/Log.h>
00005 
00006 #include <Atlas/Objects/ObjectsFwd.h>
00007 
00008 #include <sstream>
00009 
00010 namespace Atlas {
00011     namespace Message {
00012         class Element;
00013     }
00014 }
00015 
00016 namespace Eris
00017 {
00018 
00019 void doLog(LogLevel lvl, const std::string& msg);
00020 
00021 class logStreamBase
00022 {
00023 public:
00024     std::ostream& operator<<(const std::string& s)
00025     {
00026         return m_stream << s;
00027     }
00028 
00029 
00030 protected:
00031 
00032     std::ostringstream m_stream;
00033 };
00034 
00035 class debug : public logStreamBase
00036 {
00037 public:
00038     ~debug()
00039     {
00040         m_stream << std::flush;
00041         doLog(LOG_DEBUG, m_stream.str());
00042     }
00043 };
00044 
00045 class warning : public logStreamBase
00046 {
00047 public:
00048     ~warning()
00049     {
00050         m_stream << std::flush;
00051         doLog(LOG_WARNING, m_stream.str());
00052     }
00053 };
00054 
00055 class error : public logStreamBase
00056 {
00057 public:
00058     ~error()
00059     {
00060         m_stream << std::flush;
00061         doLog(LOG_ERROR, m_stream.str());
00062     }
00063 };
00064 
00065 std::ostream& operator<<(std::ostream& s, const Atlas::Objects::Root& obj);
00066 std::ostream& operator<<(std::ostream& s, const Atlas::Message::Element& msg);
00067 
00068 } // of namespace Eris
00069 
00070 #endif