X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FTarget.cc;h=2d4ded96cf2d4c25f3fea1cfe067bd24089d71dc;hb=949e357e249299c8519aa3af62245a0010dcce44;hp=c07ba211cc32349cb2857dcc8a5fbfe35366ceb9;hpb=ac86c2bb40746fbedf70a19af3307e5da642b04a;p=senf.git diff --git a/Utils/Logger/Target.cc b/Utils/Logger/Target.cc index c07ba21..2d4ded9 100644 --- a/Utils/Logger/Target.cc +++ b/Utils/Logger/Target.cc @@ -24,10 +24,11 @@ \brief Target non-inline non-template implementation */ #include "Target.hh" -//#include "Target.ih" +#include "Target.ih" // Custom includes #include +#include "ConsoleTarget.hh" //#include "Target.mpp" #define prefix_ @@ -38,7 +39,7 @@ prefix_ senf::log::Target::Target() { - TargetRegistry::instance().registerTarget(this); + detail::TargetRegistry::instance().registerTarget(this); } prefix_ senf::log::Target::~Target() @@ -49,7 +50,7 @@ prefix_ senf::log::Target::~Target() RIB::reverse_iterator i (rib_.rbegin()); unroute(i->stream_, i->area_, i->level_, i->action_); } - TargetRegistry::instance().unregisterTarget(this); + detail::TargetRegistry::instance().unregisterTarget(this); } prefix_ void senf::log::Target::route(std::string const & stream, std::string const & area, @@ -90,7 +91,7 @@ prefix_ void senf::log::Target::unroute(int index) i = rib_.begin(); else { i = rib_.end(); - std::advance(i, -index); + std::advance(i, index); } } else { if (RIB::size_type(index+1) >= rib_.size()) { @@ -101,6 +102,8 @@ prefix_ void senf::log::Target::unroute(int index) std::advance(i, index); } } + if (i == rib_.end()) + return; RoutingEntry entry (*i); rib_.erase(i); if (entry.action_ == ACCEPT) @@ -133,6 +136,8 @@ prefix_ void senf::log::Target::route(detail::StreamBase const * stream, rib_.insert(i, RoutingEntry(stream, area, level, action)); if (action == ACCEPT) updateRoutingCache(stream, area); + // This disables the initial fallback routing + detail::TargetRegistry::instance().routed(); } prefix_ void senf::log::Target::unroute(detail::StreamBase const * stream, @@ -197,14 +202,32 @@ prefix_ void senf::log::Target::write(boost::posix_time::ptime timestamp, } /////////////////////////////////////////////////////////////////////////// -// senf::log::TargetRegistry +// senf::log::detail::TargetRegistry + +prefix_ void senf::log::detail::TargetRegistry::write(StreamBase const & stream, + AreaBase const & area, unsigned level, + std::string msg) +{ + if (fallbackRouting_) + static_cast(ConsoleTarget::instance()).v_write( + (*timeSource_)(), stream.v_name(), area.v_name(), level, msg ); + else + area.write( (*timeSource_)(), stream, level, msg ); +} + +/////////////////////////////////////////////////////////////////////////// +// senf::log::TimeSource + +prefix_ senf::log::TimeSource::~TimeSource() +{} + +/////////////////////////////////////////////////////////////////////////// +// senf::log::SystemTimeSource -prefix_ void senf::log::TargetRegistry::write(detail::StreamBase const & stream, - detail::AreaBase const & area, unsigned level, - std::string msg) +prefix_ boost::posix_time::ptime senf::log::SystemTimeSource::operator()() + const { - boost::posix_time::ptime timestamp (boost::posix_time::microsec_clock::universal_time()); - area.write(timestamp, stream, level, msg); + return boost::posix_time::microsec_clock::universal_time(); } ///////////////////////////////cc.e////////////////////////////////////////