X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FSyslogUDPTarget.cc;h=03a055f8928eeb15b8f86a9bf5aef950f490c71b;hb=41eff772147b6df1961d9029ba6815b553b4f81d;hp=f4888f2a56dd707ae935f04b691f5bec0850d1bb;hpb=204c9c8a9df166f1c220bbd86e1c7a839382c73d;p=senf.git diff --git a/Utils/Logger/SyslogUDPTarget.cc b/Utils/Logger/SyslogUDPTarget.cc index f4888f2..03a055f 100644 --- a/Utils/Logger/SyslogUDPTarget.cc +++ b/Utils/Logger/SyslogUDPTarget.cc @@ -30,60 +30,27 @@ #include #include #include -#include "../../Socket/Protocols/INet/ConnectedUDPSocketHandle.hh" -#include "IOStreamTarget.hh" //#include "SyslogUDPTarget.mpp" #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -prefix_ senf::log::SyslogUDPTarget::SyslogUDPTarget(senf::INet4Address const & target, - int facility) - : facility_ (facility), tag_ (detail::getDefaultTag()), - handle_ ( senf::ConnectedUDPv4ClientSocketHandle(senf::INet4SocketAddress(target, 514u)) ), - showStream_ (false), showLevel_ (false), showArea_ (true) -{} - -prefix_ senf::log::SyslogUDPTarget::SyslogUDPTarget(senf::INet4SocketAddress const & target, - int facility) - : facility_ (facility), tag_ (detail::getDefaultTag()), - handle_ ( senf::ConnectedUDPv4ClientSocketHandle(target) ), - showStream_ (false), showLevel_ (false), showArea_ (true) -{} - -prefix_ senf::log::SyslogUDPTarget::SyslogUDPTarget(senf::INet6Address const & target, - int facility) - : facility_ (facility), tag_ (detail::getDefaultTag()), - handle_ ( senf::ConnectedUDPv6ClientSocketHandle(senf::INet6SocketAddress(target, 514u)) ), - showStream_ (false), showLevel_ (false), showArea_ (true) -{} - -prefix_ senf::log::SyslogUDPTarget::SyslogUDPTarget(senf::INet6SocketAddress const & target, - int facility) - : facility_ (facility), tag_ (detail::getDefaultTag()), - handle_ ( senf::ConnectedUDPv6ClientSocketHandle(target) ), - showStream_ (false), showLevel_ (false), showArea_ (true) -{} - prefix_ void senf::log::SyslogUDPTarget::v_write(time_type timestamp, std::string const & stream, std::string const & area, unsigned level, std::string const & message) { - std::stringstream prefix; - - prefix << '<' << (facility_ | senf::log::SyslogTarget::LEVELMAP[level]) << "> "; - if (!tag_.empty()) - prefix << tag_ << ": "; - if (showStream_) - prefix << '[' << stream << "] "; - if (showLevel_) - prefix << '[' << LEVELNAMES[level] << "] "; - if (showArea_ && area != "senf::log::DefaultArea") - prefix << '[' << area << "] "; std::string m (message); boost::trim_right(m); detail::quoteNonPrintable(m); + std::stringstream prfstream; + // The space after the '>' is there on purpose: It ensures, that the prefix (which may be empty) + // or message will not inadvertently be interpreted as date or hostname by a receiving syslog + // daemon or proxy + prfstream << '<' << (facility_ | senf::log::SyslogTarget::LEVELMAP[level]) << "> " + << prefix(timestamp, stream, area, level); + std::string const & prf (prfstream.str()); + typedef boost::char_separator Separator; typedef boost::tokenizer Tokenizer; Separator separator ("\n"); @@ -92,10 +59,10 @@ prefix_ void senf::log::SyslogUDPTarget::v_write(time_type timestamp, std::strin Tokenizer::iterator const i_end (tokenizer.end()); std::string line; - unsigned sz (896-prefix.str().size()); + unsigned sz (896-prf.size()); for (; i != i_end; ++i) for (unsigned j (0); j < i->size(); j += sz) { - line = prefix.str(); + line = prf; line += std::string(*i, j, sz); handle_.write(line); }