libmoost
|
00001 /* vim:set ts=3 sw=3 sts=3 et: */ 00028 #ifndef FM_LAST_MOOST_SERVICE_APPENDER 00029 #define FM_LAST_MOOST_SERVICE_APPENDER 00030 00037 #include <string> 00038 #include <boost/shared_ptr.hpp> 00039 #include <log4cxx/level.h> 00040 00041 namespace moost { namespace service { 00042 00043 class stream_writer_iface 00044 { 00045 public: 00046 virtual ~stream_writer_iface(); 00047 virtual void write(const char *data, size_t len) = 0; 00048 }; 00049 00050 typedef boost::shared_ptr<stream_writer_iface> stream_writer_ptr; 00051 00055 class appender_iface 00056 { 00057 public: 00058 virtual ~appender_iface(); 00059 virtual bool handle_command(std::string& _return, const std::string& cmd, const std::string& args) = 0; 00060 virtual std::string show_help() const = 0; 00061 virtual bool attach() = 0; 00062 virtual bool detach() = 0; 00063 }; 00064 00065 typedef boost::shared_ptr<appender_iface> appender_ptr; 00066 00070 class appender_factory_iface 00071 { 00072 public: 00073 virtual ~appender_factory_iface(); 00074 00081 virtual appender_ptr create(stream_writer_ptr) = 0; 00082 }; 00083 00084 typedef boost::shared_ptr<appender_factory_iface> appender_factory_ptr; 00085 00089 class log4cxx_appender_factory : public appender_factory_iface 00090 { 00091 private: 00092 log4cxx::LevelPtr m_default_level; 00093 00094 public: 00095 log4cxx_appender_factory(const std::string& = "warn"); 00096 virtual appender_ptr create(stream_writer_ptr); 00097 }; 00098 00102 class null_appender_factory : public appender_factory_iface 00103 { 00104 public: 00105 null_appender_factory(); 00106 virtual appender_ptr create(stream_writer_ptr); 00107 }; 00108 00109 } } 00110 00111 #endif 00112