diff options
Diffstat (limited to 'src/liblogger/SyslogLogSink.cpp')
-rwxr-xr-x | src/liblogger/SyslogLogSink.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/liblogger/SyslogLogSink.cpp b/src/liblogger/SyslogLogSink.cpp new file mode 100755 index 0000000..c2716a9 --- /dev/null +++ b/src/liblogger/SyslogLogSink.cpp @@ -0,0 +1,91 @@ +#include "SyslogLogSink.hpp" + +#ifndef _WIN32 +#include <syslog.h> +#else +#include "win32/syslog_win32.h" +#endif + +using namespace std; + +SyslogLogSink::SyslogLogSink( const LogLevel level, const string &ident, const string &facility ) + : LogSink( level ), m_ident( ident ), m_facility( facility ) +{ + openlog( m_ident.c_str( ), LOG_PID, facilityFromString( m_facility ) ); +} + +SyslogLogSink::~SyslogLogSink( ) +{ + closelog( ); +} + +void SyslogLogSink::log( const LogLevel level, const string &msg ) +{ + if( level > reportingLevel( ) ) return; + + syslog( levelToSyslogLevel( level ), "%s", msg.c_str( ) ); +} + +int SyslogLogSink::levelToSyslogLevel( const LogLevel level ) +{ + switch( level ) { + case logFATAL: return LOG_ALERT; + case logCRITICAL: return LOG_CRIT; + case logERROR: return LOG_ERR; + case logWARNING: return LOG_WARNING; + case logNOTICE: return LOG_NOTICE; + case logINFO: return LOG_INFO; + case logDEBUG: + case logDEBUG1: + case logDEBUG2: + case logDEBUG3: + case logDEBUG4: return LOG_DEBUG; + + case logNONE: + default: + LOG( logWARNING ) << "Unknown log level '" << level << "'. Using LOG)ERR level as syslog log level."; + return LOG_ERR; + } +} + +int SyslogLogSink::facilityFromString( const std::string &facility ) +{ + if( facility == "kern" ) return LOG_KERN; + else if( facility == "user" ) return LOG_USER; + else if( facility == "mail" ) return LOG_MAIL; + else if( facility == "daemon" ) return LOG_DAEMON; + else if( facility == "auth" ) return LOG_AUTH; + else if( facility == "syslog" ) return LOG_SYSLOG; + else if( facility == "lpr" ) return LOG_LPR; + else if( facility == "news" ) return LOG_NEWS; + else if( facility == "uucp" ) return LOG_UUCP; + else if( facility == "cron" ) return LOG_CRON; +#ifdef LOG_AUTHPRIV + else if( facility == "authpriv" ) return LOG_AUTHPRIV; +#endif +#ifdef LOG_FTP + else if( facility == "ftp" ) return LOG_FTP; +#endif +#ifdef LOG_NTP + else if( facility == "ntp" ) return LOG_NTP; +#endif +#ifdef LOG_SECURITY + else if( facility == "security" ) return LOG_SECURITY; +#endif +#ifdef LOG_CONSOLE + else if( facility == "console" ) return LOG_CONSOLE; +#endif +#ifdef LOG_AUDIT + else if( facility == "audit" ) return LOG_AUDIT; +#endif + else if( facility == "local0" ) return LOG_LOCAL0; + else if( facility == "local1" ) return LOG_LOCAL1; + else if( facility == "local2" ) return LOG_LOCAL2; + else if( facility == "local3" ) return LOG_LOCAL3; + else if( facility == "local4" ) return LOG_LOCAL4; + else if( facility == "local5" ) return LOG_LOCAL5; + else if( facility == "local6" ) return LOG_LOCAL6; + else if( facility == "local7" ) return LOG_LOCAL7; + else return LOG_USER; +} + |