summaryrefslogtreecommitdiff
path: root/src/liblogger/SyslogLogSink.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/liblogger/SyslogLogSink.cpp')
-rwxr-xr-xsrc/liblogger/SyslogLogSink.cpp91
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;
+}
+