X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FSyslogUDPTarget.hh;h=71732d5ae9fa8269f973f6c751c5a77193b93dd3;hb=c5d0e492a701a054b1f3d56e128b2c4675b0d50b;hp=c3d8b152146b97841f0a745b1d2cce0a374560d9;hpb=07b8c0784c854893cd1a4ecb9aa051a625ebe17e;p=senf.git diff --git a/Utils/Logger/SyslogUDPTarget.hh b/Utils/Logger/SyslogUDPTarget.hh index c3d8b15..71732d5 100644 --- a/Utils/Logger/SyslogUDPTarget.hh +++ b/Utils/Logger/SyslogUDPTarget.hh @@ -43,9 +43,9 @@ namespace log { /** \brief Log target writing UDP syslog packets - The SyslogUDPTarget will send all log messages directly via UDP to a target host. This host - should have a syslog daemon or relay running. The protocol is defined in RFC-3164. + The SyslogUDPTarget will send all %log messages directly via UDP to a target host. This + host should have a syslog daemon or relay running. The protocol is defined in RFC-3164. This log target has some important benefits: @@ -66,7 +66,7 @@ namespace log { the default facility is LOG_USER - The SENF log levels are mapped to syslog levels in the following way: + The SENF %log levels are mapped to syslog levels in the following way: @@ -78,14 +78,16 @@ namespace log {
senf::log::VERBOSE \c LOG_DEBUG
\note Since the UDP syslog packets are limited to 1024 characters and there must be some - space left so a relay may optionally add a timestamp and hostname section, the log - messages are split after 896 characters. Additionally the log messages are split at each + space left so a relay may optionally add a timestamp and hostname section, the %log + messages are split after 896 characters. Additionally the %log messages are split at each newline char since non-printable characters are not allowed. \implementation The RFC only \e recommends the exact message format. This allows us to include the \c PRI part but skip the \c HEADER part (which includes the timestamp and hostname) for better performance. We add a space after the \c PRI to force the syslog daemon to skip the \c HEADER part. + + \ingroup targets */ class SyslogUDPTarget : public Target, private detail::LogFormat @@ -113,17 +115,65 @@ namespace log { using detail::LogFormat::timeFormat; using detail::LogFormat::tag; + bool syslog() const; ///< \c true, if using syslog format, \c false otherwise + /**< When syslog format is disabled, messages are not + formated as valid syslog messages but sent using plain + UDP. */ + void syslog(bool enabled=true); ///< Set syslog format + private: + void init(); void v_write(time_type timestamp, std::string const & stream, std::string const & area, unsigned level, std::string const & message); + void consoleFormat(std::ostream & os); + int facility_; typedef senf::ClientSocketHandle< senf::MakeSocketPolicy< senf::DatagramFramingPolicy, senf::ConnectedCommunicationPolicy, senf::WriteablePolicy>::policy > Handle; Handle handle_; + bool syslogFormat_; + + public: + enum LogFacility { + AUTHPRIV = LOG_AUTHPRIV, + CRON = LOG_CRON, + DAEMON = LOG_DAEMON, + FTP = LOG_FTP, + KERN = LOG_KERN, + LOCAL0 = LOG_LOCAL0, + LOCAL1 = LOG_LOCAL1, + LOCAL2 = LOG_LOCAL2, + LOCAL3 = LOG_LOCAL3, + LOCAL4 = LOG_LOCAL4, + LOCAL5 = LOG_LOCAL5, + LOCAL6 = LOG_LOCAL6, + LOCAL7 = LOG_LOCAL7, + LPR = LOG_LPR, + MAIL = LOG_MAIL, + NEWS = LOG_NEWS, + SYSLOG = LOG_SYSLOG, + USER = LOG_USER, + UUCP = LOG_UUCP + }; + + private: + + struct RegisterConsole { + RegisterConsole(); + static boost::shared_ptr create( + senf::INet4SocketAddress const & target, LogFacility facility = USER); + static boost::shared_ptr create( + senf::INet4Address const & target, LogFacility facility = USER); + static boost::shared_ptr create( + senf::INet6SocketAddress const & target, LogFacility facility = USER); + static boost::shared_ptr create( + senf::INet6Address const & target, LogFacility facility = USER); + static RegisterConsole instance; + }; }; }}