libmoost
/home/mhx/git/github/libmoost/include/moost/service/appender.h
Go to the documentation of this file.
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