#include "SyslogLogSink.hpp" #ifndef _WIN32 #include #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; }