summaryrefslogtreecommitdiff
path: root/src/logger/SyslogLogSink.cpp
blob: c2716a9b1a74ab692bac04a87bcf3ac44181d0cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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;	
}