From 51a31fa59ea1169e6588f5c8be33e4c3259a8f57 Mon Sep 17 00:00:00 2001 From: Thiago Marques Date: Wed, 3 Apr 2019 14:58:21 +0000 Subject: [PATCH 1/6] Changes in libnetdata/log/log.c to append facility --- libnetdata/log/log.c | 299 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 296 insertions(+), 3 deletions(-) diff --git a/libnetdata/log/log.c b/libnetdata/log/log.c index 4522304e622451..86cde31872a4ef 100644 --- a/libnetdata/log/log.c +++ b/libnetdata/log/log.c @@ -19,11 +19,300 @@ const char *stdaccess_filename = NULL; const char *stderr_filename = NULL; const char *stdout_filename = NULL; -void syslog_init(void) { +// ---------------------------------------------------------------------------- +// Log facility(https://tools.ietf.org/html/rfc5424) +// +// The facilities accepted in the Netdata are in according with the following +// header files for their respective operate system: +// sys/syslog.h (Linux ) +// sys/sys/syslog.h (FreeBSD) +// bsd/sys/syslog.h (darwin-xnu) + +int log_facility_id(char *facility_name) +{ + if ( !(strcmp(facility_name,"auth") ) ) + { + return LOG_AUTH; + } + else if ( !(strcmp(facility_name,"authpriv") ) ) + { + return LOG_AUTHPRIV; + } +#ifdef __FreeBSD__ + else if ( !(strcmp(facility_name,"console") ) ) + { + return LOG_CONSOLE; + } +#endif + else if ( !(strcmp(facility_name,"cron") ) ) + { + return LOG_CRON; + } + else if ( !(strcmp(facility_name,"daemon") ) ) + { + return LOG_DAEMON; + } + else if ( !(strcmp(facility_name,"ftp") ) ) + { + return LOG_FTP; + } +#ifdef __APPLE__ + else if ( !(strcmp(facility_name,"install") ) ) + { + return LOG_INSTALL; + } +#endif + else if ( !(strcmp(facility_name,"kern") ) ) + { + return LOG_KERN; + } + else if ( !(strcmp(facility_name,"lpr") ) ) + { + return LOG_LPR; + } + else if ( !(strcmp(facility_name,"mail") ) ) + { + return LOG_MAIL; + } + /* + else if ( !(strcmp(facility_name,"mark") ) ) + { + //this is internal for all OS + return INTERNAL_MARK; + } + */ +#ifdef __APPLE__ + else if ( !(strcmp(facility_name,"netinfo") ) ) + { + return LOG_NETINFO; + } + else if ( !(strcmp(facility_name,"ras") ) ) + { + return LOG_RAS; + } + else if ( !(strcmp(facility_name,"remoteauth") ) ) + { + return LOG_REMOTEAUTH; + } +#endif + else if ( !(strcmp(facility_name,"news") ) ) + { + return LOG_NEWS; + } +#ifdef __FreeBSD__ + else if ( !(strcmp(facility_name,"ntp") ) ) + { + return LOG_NTP; + } +#endif + else if ( !(strcmp(facility_name,"security") ) ) + { + //FreeBSD is the unique that does not consider + //this facility deprecated. We are keeping + //it for other OS while they are kept in their headers. +#ifdef __FreeBSD__ + return LOG_SECURITY; +#else + return LOG_AUTH; +#endif + } + else if ( !(strcmp(facility_name,"syslog") ) ) + { + return LOG_SYSLOG; + } + else if ( !(strcmp(facility_name,"user") ) ) + { + return LOG_USER; + } + else if ( !(strcmp(facility_name,"uucp") ) ) + { + return LOG_UUCP; + } + else if ( !(strcmp(facility_name,"local0") ) ) + { + return LOG_LOCAL0; + } + else if ( !(strcmp(facility_name,"local1") ) ) + { + return LOG_LOCAL1; + } + else if ( !(strcmp(facility_name,"local2") ) ) + { + return LOG_LOCAL2; + } + else if ( !(strcmp(facility_name,"local3") ) ) + { + return LOG_LOCAL3; + } + else if ( !(strcmp(facility_name,"local4") ) ) + { + return LOG_LOCAL4; + } + else if ( !(strcmp(facility_name,"local5") ) ) + { + return LOG_LOCAL5; + } + else if ( !(strcmp(facility_name,"local6") ) ) + { + return LOG_LOCAL6; + } + else if ( !(strcmp(facility_name,"local7") ) ) + { + return LOG_LOCAL7; + } +#ifdef __APPLE__ + else if ( !(strcmp(facility_name,"launchd") ) ) + { + return LOG_LAUNCHD; + } +#endif + + return LOG_DAEMON; +} + +//we do not need to use this now, but I already created this function to be +//used case necessary. +char *log_facility_name(int code) +{ + char *defvalue = { "daemon" }; + switch(code) + { + case LOG_AUTH: + { + return "auth"; + } + case LOG_AUTHPRIV: + { + return "authpriv"; + } +#ifdef __FreeBSD__ + case LOG_CONSOLE: + { + return "console"; + } +#endif + case LOG_CRON: + { + return "cron"; + } + case LOG_DAEMON: + { + return defvalue; + } + case LOG_FTP: + { + return "ftp"; + } +#ifdef __APPLE__ + case LOG_INSTALL: + { + return "install"; + } +#endif + case LOG_KERN: + { + return "kern"; + } + case LOG_LPR: + { + return "lpr"; + } + case LOG_MAIL: + { + return "mail"; + } +#ifdef __APPLE__ + case LOG_NETINFO: + { + return "netinfo" ; + } + case LOG_RAS: + { + return "ras"; + } + case LOG_REMOTEAUTH: + { + return "remoteauth"; + } +#endif + case LOG_NEWS: + { + return "news"; + } +#ifdef __FreeBSD__ + case LOG_NTP: + { + return "ntp" ; + } + case LOG_SECURITY: + { + return "security"; + } +#endif + case LOG_SYSLOG: + { + return "syslog"; + } + case LOG_USER: + { + return "user"; + } + case LOG_UUCP: + { + return "uucp"; + } + case LOG_LOCAL0: + { + return "local0"; + } + case LOG_LOCAL1: + { + return "local1"; + } + case LOG_LOCAL2: + { + return "local2"; + } + case LOG_LOCAL3: + { + return "local3"; + } + case LOG_LOCAL4: + { + return "local4" ; + } + case LOG_LOCAL5: + { + return "local5"; + } + case LOG_LOCAL6: + { + return "local6"; + } + case LOG_LOCAL7: + { + return "local7" ; + } +#ifdef __APPLE__ + case LOG_LAUNCHD: + { + return "launchd"; + } +#endif + } + + return defvalue; +} + +// ---------------------------------------------------------------------------- + +//void syslog_init(void) { +void syslog_init(int facility) { static int i = 0; if(!i) { - openlog(program_name, LOG_PID, LOG_DAEMON); + //openlog(program_name, LOG_PID, LOG_DAEMON); + openlog(program_name, LOG_PID, facility); i = 1; } } @@ -70,7 +359,11 @@ static FILE *open_log_file(int fd, FILE *fp, const char *filename, int *enabled_ if(!strcmp(filename, "syslog")) { filename = "/dev/null"; devnull = 1; - syslog_init(); + + char deffacility[8]; + snprintfz(deffacility,8,"%s","daemon"); + syslog_init(log_facility_id(config_get(CONFIG_SECTION_GLOBAL, "facility log", deffacility))); + //syslog_init(); if(enabled_syslog) *enabled_syslog = 1; } else if(enabled_syslog) *enabled_syslog = 0; From 3e759e467673699d573fdf61c36beb887d3e07e9 Mon Sep 17 00:00:00 2001 From: Thiago Marques Date: Wed, 3 Apr 2019 20:04:49 +0000 Subject: [PATCH 2/6] Fixing compilatioN --- libnetdata/log/log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libnetdata/log/log.c b/libnetdata/log/log.c index 86cde31872a4ef..87038f35f20b81 100644 --- a/libnetdata/log/log.c +++ b/libnetdata/log/log.c @@ -28,7 +28,7 @@ const char *stdout_filename = NULL; // sys/sys/syslog.h (FreeBSD) // bsd/sys/syslog.h (darwin-xnu) -int log_facility_id(char *facility_name) +static int log_facility_id(char *facility_name) { if ( !(strcmp(facility_name,"auth") ) ) { From b0c3f17fd3e38e89bc6e8c6731d750d559254904 Mon Sep 17 00:00:00 2001 From: Thiago Marques Date: Wed, 3 Apr 2019 20:13:26 +0000 Subject: [PATCH 3/6] Fixing compilation problem! --- daemon/main.c | 4 + libnetdata/log/log.c | 190 +++++++++++++++++++++++++++++++++++-------- libnetdata/log/log.h | 1 + 3 files changed, 163 insertions(+), 32 deletions(-) diff --git a/daemon/main.c b/daemon/main.c index e875fa938c639a..ba8d4b4ef6732a 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -355,6 +355,10 @@ void log_init(void) { snprintfz(filename, FILENAME_MAX, "%s/access.log", netdata_configured_log_dir); stdaccess_filename = config_get(CONFIG_SECTION_GLOBAL, "access log", filename); + char deffacility[8]; + snprintfz(deffacility,7,"%s","daemon"); + facility_log = config_get(CONFIG_SECTION_GLOBAL, "facility log", deffacility); + error_log_throttle_period = config_get_number(CONFIG_SECTION_GLOBAL, "errors flood protection period", error_log_throttle_period); error_log_errors_per_period = (unsigned long)config_get_number(CONFIG_SECTION_GLOBAL, "errors to trigger flood protection", (long long int)error_log_errors_per_period); error_log_errors_per_period_backup = error_log_errors_per_period; diff --git a/libnetdata/log/log.c b/libnetdata/log/log.c index 87038f35f20b81..2f00e77ec6f26f 100644 --- a/libnetdata/log/log.c +++ b/libnetdata/log/log.c @@ -18,6 +18,7 @@ FILE *stdaccess = NULL; const char *stdaccess_filename = NULL; const char *stderr_filename = NULL; const char *stdout_filename = NULL; +const char *facility_log = NULL; // ---------------------------------------------------------------------------- // Log facility(https://tools.ietf.org/html/rfc5424) @@ -28,84 +29,209 @@ const char *stdout_filename = NULL; // sys/sys/syslog.h (FreeBSD) // bsd/sys/syslog.h (darwin-xnu) +#define LOG_AUTH_KEY "auth" +#define LOG_AUTHPRIV_KEY "authpriv" +#ifdef __FreeBSD__ +# define LOG_CONSOLE_KEY "console" +#endif +#define LOG_CRON_KEY "cron" +#define LOG_DAEMON_KEY "daemon" +#define LOG_FTP_KEY "ftp" +#ifdef __APPLE__ +# define LOG_INSTALL_KEY "install" +#endif +#define LOG_KERN_KEY "kern" +#define LOG_LPR_KEY "lpr" +#define LOG_MAIL_KEY "mail" +//#define LOG_INTERNAL_MARK_KEY "mark" +#ifdef __APPLE__ +# define LOG_NETINFO_KEY "netinfo" +# define LOG_RAS_KEY "ras" +# define LOG_REMOTEAUTH_KEY "remoteauth" +#endif +#define LOG_NEWS_KEY "news" +#ifdef __FreeBSD__ +# define LOG_NTP_KEY "ntp" +#endif +#define LOG_SECURITY_KEY "security" +#define LOG_SYSLOG_KEY "syslog" +#define LOG_USER_KEY "user" +#define LOG_UUCP_KEY "uucp" +#ifdef __APPLE__ +# define LOG_LAUNCHD_KEY "launchd" +#endif +#define LOG_LOCAL0_KEY "local0" +#define LOG_LOCAL1_KEY "local1" +#define LOG_LOCAL2_KEY "local2" +#define LOG_LOCAL3_KEY "local3" +#define LOG_LOCAL4_KEY "local4" +#define LOG_LOCAL5_KEY "local5" +#define LOG_LOCAL6_KEY "local6" +#define LOG_LOCAL7_KEY "local7" + static int log_facility_id(char *facility_name) { - if ( !(strcmp(facility_name,"auth") ) ) + static int + hash_auth = 0, + hash_authpriv = 0, +#ifdef __FreeBSD__ + hash_console = 0, +#endif + hash_cron = 0, + hash_daemon = 0, + hash_ftp = 0, +#ifdef __APPLE__ + hash_install = 0, +#endif + hash_kern = 0, + hash_lpr = 0, + hash_mail = 0, +// hash_mark = 0, +#ifdef __APPLE__ + hash_netinfo = 0, + hash_ras = 0, + hash_remoteauth = 0, +#endif + hash_news = 0, +#ifdef __FreeBSD__ + hash_ntp = 0, +#endif + hash_security = 0, + hash_syslog = 0, + hash_user = 0, + hash_uucp = 0, +#ifdef __APPLE__ + hash_launchd = 0, +#endif + hash_local0 = 0, + hash_local1 = 0, + hash_local2 = 0, + hash_local3 = 0, + hash_local4 = 0, + hash_local5 = 0, + hash_local6 = 0, + hash_local7 = 0; + + if(unlikely(!hash_auth)) + { + hash_auth = simple_hash(LOG_AUTH_KEY); + hash_authpriv = simple_hash(LOG_AUTHPRIV_KEY); +#ifdef __FreeBSD__ + hash_console = simple_hash(LOG_CONSOLE_KEY); +#endif + hash_cron = simple_hash(LOG_CRON_KEY); + hash_daemon = simple_hash(LOG_DAEMON_KEY); + hash_ftp = simple_hash(LOG_FTP_KEY); +#ifdef __APPLE__ + hash_install = simple_hash(LOG_INSTALL_KEY); +#endif + hash_kern = simple_hash(LOG_KERN_KEY); + hash_lpr = simple_hash(LOG_LPR_KEY); + hash_mail = simple_hash(LOG_MAIL_KEY); +// hash_mark = simple_uhash(); +#ifdef __APPLE__ + hash_netinfo = simple_hash(LOG_NETINFO_KEY); + hash_ras = simple_hash(LOG_RAS_KEY); + hash_remoteauth = simple_hash(LOG_REMOTEAUTH_KEY); +#endif + hash_news = simple_hash(LOG_NEWS_KEY); +#ifdef __FreeBSD__ + hash_ntp = simple_hash(LOG_NTP_KEY); +#endif + hash_security = simple_hash(LOG_SECURITY_KEY); + hash_syslog = simple_hash(LOG_SYSLOG_KEY); + hash_user = simple_hash(LOG_USER_KEY); + hash_uucp = simple_hash(LOG_UUCP_KEY); +#ifdef __APPLE__ + hash_launchd = simple_hash(LOG_LAUNCHD_KEY); +#endif + hash_local0 = simple_hash(LOG_LOCAL0_KEY); + hash_local1 = simple_hash(LOG_LOCAL1_KEY); + hash_local2 = simple_hash(LOG_LOCAL2_KEY); + hash_local3 = simple_hash(LOG_LOCAL3_KEY); + hash_local4 = simple_hash(LOG_LOCAL4_KEY); + hash_local5 = simple_hash(LOG_LOCAL5_KEY); + hash_local6 = simple_hash(LOG_LOCAL6_KEY); + hash_local7 = simple_hash(LOG_LOCAL7_KEY); + } + + int hash = simple_hash(facility_name); + if ( hash == hash_auth ) { return LOG_AUTH; } - else if ( !(strcmp(facility_name,"authpriv") ) ) + else if ( hash == hash_authpriv ) { return LOG_AUTHPRIV; } #ifdef __FreeBSD__ - else if ( !(strcmp(facility_name,"console") ) ) + else if ( hash == hash_console ) { return LOG_CONSOLE; } #endif - else if ( !(strcmp(facility_name,"cron") ) ) + else if ( hash == hash_cron ) { return LOG_CRON; } - else if ( !(strcmp(facility_name,"daemon") ) ) + else if ( hash == hash_daemon ) { return LOG_DAEMON; } - else if ( !(strcmp(facility_name,"ftp") ) ) + else if ( hash == hash_ftp ) { return LOG_FTP; } #ifdef __APPLE__ - else if ( !(strcmp(facility_name,"install") ) ) + else if ( hash == hash_install ) { return LOG_INSTALL; } #endif - else if ( !(strcmp(facility_name,"kern") ) ) + else if ( hash == hash_kern ) { return LOG_KERN; } - else if ( !(strcmp(facility_name,"lpr") ) ) + else if ( hash == hash_lpr ) { return LOG_LPR; } - else if ( !(strcmp(facility_name,"mail") ) ) + else if ( hash == hash_mail ) { return LOG_MAIL; } /* - else if ( !(strcmp(facility_name,"mark") ) ) + else if ( hash == hash_mark ) { //this is internal for all OS return INTERNAL_MARK; } */ #ifdef __APPLE__ - else if ( !(strcmp(facility_name,"netinfo") ) ) + else if ( hash == hash_netinfo ) { return LOG_NETINFO; } - else if ( !(strcmp(facility_name,"ras") ) ) + else if ( hash == hash_ras ) { return LOG_RAS; } - else if ( !(strcmp(facility_name,"remoteauth") ) ) + else if ( hash == hash_remoteauth ) { return LOG_REMOTEAUTH; } #endif - else if ( !(strcmp(facility_name,"news") ) ) + else if ( hash == hash_news ) { return LOG_NEWS; } #ifdef __FreeBSD__ - else if ( !(strcmp(facility_name,"ntp") ) ) + else if ( hash == hash_ntp ) { return LOG_NTP; } #endif - else if ( !(strcmp(facility_name,"security") ) ) + else if ( hash == hash_security ) { //FreeBSD is the unique that does not consider //this facility deprecated. We are keeping @@ -116,52 +242,52 @@ static int log_facility_id(char *facility_name) return LOG_AUTH; #endif } - else if ( !(strcmp(facility_name,"syslog") ) ) + else if ( hash == hash_syslog ) { return LOG_SYSLOG; } - else if ( !(strcmp(facility_name,"user") ) ) + else if ( hash == hash_user ) { return LOG_USER; } - else if ( !(strcmp(facility_name,"uucp") ) ) + else if ( hash == hash_uucp ) { return LOG_UUCP; } - else if ( !(strcmp(facility_name,"local0") ) ) + else if ( hash == hash_local0 ) { return LOG_LOCAL0; } - else if ( !(strcmp(facility_name,"local1") ) ) + else if ( hash == hash_local1 ) { return LOG_LOCAL1; } - else if ( !(strcmp(facility_name,"local2") ) ) + else if ( hash == hash_local2 ) { return LOG_LOCAL2; } - else if ( !(strcmp(facility_name,"local3") ) ) + else if ( hash == hash_local3 ) { return LOG_LOCAL3; } - else if ( !(strcmp(facility_name,"local4") ) ) + else if ( hash == hash_local4 ) { return LOG_LOCAL4; } - else if ( !(strcmp(facility_name,"local5") ) ) + else if ( hash == hash_local5 ) { return LOG_LOCAL5; } - else if ( !(strcmp(facility_name,"local6") ) ) + else if ( hash == hash_local6 ) { return LOG_LOCAL6; } - else if ( !(strcmp(facility_name,"local7") ) ) + else if ( hash == hash_local7 ) { return LOG_LOCAL7; } #ifdef __APPLE__ - else if ( !(strcmp(facility_name,"launchd") ) ) + else if ( hash == hash_launchd ) { return LOG_LAUNCHD; } @@ -172,6 +298,7 @@ static int log_facility_id(char *facility_name) //we do not need to use this now, but I already created this function to be //used case necessary. +/* char *log_facility_name(int code) { char *defvalue = { "daemon" }; @@ -303,6 +430,7 @@ char *log_facility_name(int code) return defvalue; } +*/ // ---------------------------------------------------------------------------- @@ -360,9 +488,7 @@ static FILE *open_log_file(int fd, FILE *fp, const char *filename, int *enabled_ filename = "/dev/null"; devnull = 1; - char deffacility[8]; - snprintfz(deffacility,8,"%s","daemon"); - syslog_init(log_facility_id(config_get(CONFIG_SECTION_GLOBAL, "facility log", deffacility))); + syslog_init(log_facility_id(facility_log)); //syslog_init(); if(enabled_syslog) *enabled_syslog = 1; } diff --git a/libnetdata/log/log.h b/libnetdata/log/log.h index 44670f31c58392..7308bad331fb3f 100644 --- a/libnetdata/log/log.h +++ b/libnetdata/log/log.h @@ -54,6 +54,7 @@ extern FILE *stdaccess; extern const char *stdaccess_filename; extern const char *stderr_filename; extern const char *stdout_filename; +extern const char *facility_log; extern int access_log_syslog; extern int error_log_syslog; From e29eb99f2c052b913ab40c32952d026db503c306 Mon Sep 17 00:00:00 2001 From: Thiago Marques Date: Thu, 4 Apr 2019 16:09:30 +0000 Subject: [PATCH 4/6] Remove comments and adjust indentation inside log --- libnetdata/log/log.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/libnetdata/log/log.c b/libnetdata/log/log.c index 2f00e77ec6f26f..6135b8c53deb61 100644 --- a/libnetdata/log/log.c +++ b/libnetdata/log/log.c @@ -434,12 +434,10 @@ char *log_facility_name(int code) // ---------------------------------------------------------------------------- -//void syslog_init(void) { void syslog_init(int facility) { static int i = 0; if(!i) { - //openlog(program_name, LOG_PID, LOG_DAEMON); openlog(program_name, LOG_PID, facility); i = 1; } @@ -489,7 +487,6 @@ static FILE *open_log_file(int fd, FILE *fp, const char *filename, int *enabled_ devnull = 1; syslog_init(log_facility_id(facility_log)); - //syslog_init(); if(enabled_syslog) *enabled_syslog = 1; } else if(enabled_syslog) *enabled_syslog = 0; From b089e6c50641f9f9d989637c43deeb80597a8e08 Mon Sep 17 00:00:00 2001 From: thiagoftsm <49162938+thiagoftsm@users.noreply.github.com> Date: Thu, 4 Apr 2019 16:22:04 +0000 Subject: [PATCH 5/6] Update log.c --- libnetdata/log/log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libnetdata/log/log.c b/libnetdata/log/log.c index 6135b8c53deb61..62fefff12b69ef 100644 --- a/libnetdata/log/log.c +++ b/libnetdata/log/log.c @@ -486,7 +486,7 @@ static FILE *open_log_file(int fd, FILE *fp, const char *filename, int *enabled_ filename = "/dev/null"; devnull = 1; - syslog_init(log_facility_id(facility_log)); + syslog_init(log_facility_id(facility_log)); if(enabled_syslog) *enabled_syslog = 1; } else if(enabled_syslog) *enabled_syslog = 0; From d23fd3db0a14b4b00e4f6bd65241001e39c247eb Mon Sep 17 00:00:00 2001 From: Thiago Marques Date: Fri, 5 Apr 2019 12:48:12 +0000 Subject: [PATCH 6/6] Elimination of unnecessary calls to function --- libnetdata/log/log.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libnetdata/log/log.c b/libnetdata/log/log.c index 62fefff12b69ef..7849aedc4aa57e 100644 --- a/libnetdata/log/log.c +++ b/libnetdata/log/log.c @@ -69,7 +69,7 @@ const char *facility_log = NULL; #define LOG_LOCAL6_KEY "local6" #define LOG_LOCAL7_KEY "local7" -static int log_facility_id(char *facility_name) +static int log_facility_id(const char *facility_name) { static int hash_auth = 0, @@ -434,11 +434,11 @@ char *log_facility_name(int code) // ---------------------------------------------------------------------------- -void syslog_init(int facility) { +void syslog_init() { static int i = 0; if(!i) { - openlog(program_name, LOG_PID, facility); + openlog(program_name, LOG_PID,log_facility_id(facility_log)); i = 1; } } @@ -486,7 +486,7 @@ static FILE *open_log_file(int fd, FILE *fp, const char *filename, int *enabled_ filename = "/dev/null"; devnull = 1; - syslog_init(log_facility_id(facility_log)); + syslog_init(); if(enabled_syslog) *enabled_syslog = 1; } else if(enabled_syslog) *enabled_syslog = 0;