2013-02-05 04:08:48 +00:00
|
|
|
#pragma once
|
2019-04-05 20:12:29 +00:00
|
|
|
#include <memory>
|
2019-04-04 11:46:38 +00:00
|
|
|
#include <string>
|
2013-02-05 04:08:48 +00:00
|
|
|
|
|
|
|
|
namespace fc {
|
|
|
|
|
class appender;
|
|
|
|
|
class log_message;
|
2013-06-05 19:19:00 +00:00
|
|
|
class variant;
|
2013-02-05 04:08:48 +00:00
|
|
|
|
2019-04-05 20:12:29 +00:00
|
|
|
class appender_factory {
|
2013-02-05 04:08:48 +00:00
|
|
|
public:
|
2019-04-05 20:12:29 +00:00
|
|
|
typedef std::shared_ptr<appender_factory> ptr;
|
2013-02-05 04:08:48 +00:00
|
|
|
|
|
|
|
|
virtual ~appender_factory(){};
|
2019-04-05 20:12:29 +00:00
|
|
|
virtual std::shared_ptr<appender> create( const variant& args ) = 0;
|
2013-02-05 04:08:48 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
namespace detail {
|
|
|
|
|
template<typename T>
|
|
|
|
|
class appender_factory_impl : public appender_factory {
|
|
|
|
|
public:
|
2019-04-05 20:12:29 +00:00
|
|
|
virtual std::shared_ptr<appender> create( const variant& args ) {
|
|
|
|
|
return std::shared_ptr<appender>(new T(args));
|
2013-02-05 04:08:48 +00:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-05 20:12:29 +00:00
|
|
|
class appender {
|
2013-02-05 04:08:48 +00:00
|
|
|
public:
|
2019-04-05 20:12:29 +00:00
|
|
|
typedef std::shared_ptr<appender> ptr;
|
2013-02-05 04:08:48 +00:00
|
|
|
|
|
|
|
|
template<typename T>
|
2019-04-04 11:46:38 +00:00
|
|
|
static bool register_appender(const std::string& type) {
|
2019-04-05 20:12:29 +00:00
|
|
|
return register_appender( type, appender_factory::ptr( new detail::appender_factory_impl<T>() ) );
|
2013-02-05 04:08:48 +00:00
|
|
|
}
|
|
|
|
|
|
2019-08-29 16:26:34 +00:00
|
|
|
virtual ~appender() = default;
|
2019-04-04 11:46:38 +00:00
|
|
|
static appender::ptr create( const std::string& name, const std::string& type, const variant& args );
|
|
|
|
|
static appender::ptr get( const std::string& name );
|
|
|
|
|
static bool register_appender( const std::string& type, const appender_factory::ptr& f );
|
2013-02-05 04:08:48 +00:00
|
|
|
|
|
|
|
|
virtual void log( const log_message& m ) = 0;
|
|
|
|
|
};
|
|
|
|
|
}
|