void logger::log( log_message m ) { m.get_context().append_context( my->_name ); for( auto itr = my->_appenders.begin(); itr != my->_appenders.end(); ++itr ) (*itr)->log( m ); if( my->_additivity && my->_parent != nullptr) { my->_parent.log(m); } }
// MS THREAD METHOD MESSAGE \t\t\t File:Line void file_appender::log( const log_message& m ) { std::stringstream line; //line << (m.get_context().get_timestamp().time_since_epoch().count() % (1000ll*1000ll*60ll*60))/1000 <<"ms "; line << string(m.get_context().get_timestamp()) << " "; line << std::setw( 21 ) << (m.get_context().get_thread_name().substr(0,9) + string(":") + m.get_context().get_task_name()).c_str() << " "; string method_name = m.get_context().get_method(); // strip all leading scopes... if( method_name.size() ) { uint32_t p = 0; for( uint32_t i = 0;i < method_name.size(); ++i ) { if( method_name[i] == ':' ) p = i; } if( method_name[p] == ':' ) ++p; line << std::setw( 20 ) << m.get_context().get_method().substr(p,20).c_str() <<" "; } line << "] "; fc::string message = fc::format_string( m.get_format(), m.get_data() ); line << message.c_str(); //fc::variant lmsg(m); // fc::string fmt_str = fc::format_string( my->cfg.format, mutable_variant_object(m.get_context())( "message", message) ); { fc::scoped_lock<boost::mutex> lock( my->slock ); my->out << line.str() << "\t\t\t" << m.get_context().get_file() << ":" << m.get_context().get_line_number() << "\n"; if( my->cfg.flush ) my->out.flush(); } }