peerplays-fc/src/log/appender.cpp

49 lines
1.7 KiB
C++
Raw Normal View History

#include <fc/log/appender.hpp>
#include <fc/log/logger.hpp>
#include <fc/thread/unique_lock.hpp>
#include <unordered_map>
#include <string>
#include <fc/thread/spin_lock.hpp>
#include <fc/thread/scoped_lock.hpp>
#include <fc/log/console_appender.hpp>
#include <fc/log/file_appender.hpp>
#include <fc/variant.hpp>
#include "console_defines.h"
namespace fc {
std::unordered_map<std::string,appender::ptr>& get_appender_map() {
static std::unordered_map<std::string,appender::ptr> lm;
return lm;
}
std::unordered_map<std::string,appender_factory::ptr>& get_appender_factory_map() {
static std::unordered_map<std::string,appender_factory::ptr> lm;
return lm;
}
appender::ptr appender::get( const fc::string& s ) {
static fc::spin_lock appender_spinlock;
scoped_lock<spin_lock> lock(appender_spinlock);
return get_appender_map()[s];
}
bool appender::register_appender( const fc::string& type, const appender_factory::ptr& f )
{
get_appender_factory_map()[type] = f;
return true;
}
appender::ptr appender::create( const fc::string& name, const fc::string& type, const variant& args )
{
auto fact_itr = get_appender_factory_map().find(type);
if( fact_itr == get_appender_factory_map().end() ) {
//wlog( "Unknown appender type '%s'", type.c_str() );
return appender::ptr();
}
auto ap = fact_itr->second->create( args );
get_appender_map()[name] = ap;
return ap;
}
static bool reg_console_appender = appender::register_appender<console_appender>( "console" );
static bool reg_file_appender = appender::register_appender<file_appender>( "file" );
} // namespace fc