#pragma once #include #include namespace fc { class appender; class log_message; class variant; class appender_factory : public fc::retainable { public: typedef fc::shared_ptr ptr; virtual ~appender_factory(){}; virtual fc::shared_ptr create( const variant& args ) = 0; }; namespace detail { template class appender_factory_impl : public appender_factory { public: virtual fc::shared_ptr create( const variant& args ) { return fc::shared_ptr(new T(args)); } }; } class appender : public fc::retainable { public: typedef fc::shared_ptr ptr; template static bool register_appender(const fc::string& type) { return register_appender( type, new detail::appender_factory_impl() ); } static appender::ptr create( const fc::string& name, const fc::string& type, const variant& args ); static appender::ptr get( const fc::string& name ); static bool register_appender( const fc::string& type, const appender_factory::ptr& f ); virtual void log( const log_message& m ) = 0; }; }