|
@@ -18,12 +18,427 @@ FILE *stdaccess = NULL;
|
|
|
const char *stdaccess_filename = NULL;
|
|
|
const char *stderr_filename = NULL;
|
|
|
const char *stdout_filename = NULL;
|
|
|
+const char *facility_log = 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)
|
|
|
+
|
|
|
+#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(const char *facility_name)
|
|
|
+{
|
|
|
+ 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 ( hash == hash_authpriv )
|
|
|
+ {
|
|
|
+ return LOG_AUTHPRIV;
|
|
|
+ }
|
|
|
+#ifdef __FreeBSD__
|
|
|
+ else if ( hash == hash_console )
|
|
|
+ {
|
|
|
+ return LOG_CONSOLE;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ else if ( hash == hash_cron )
|
|
|
+ {
|
|
|
+ return LOG_CRON;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_daemon )
|
|
|
+ {
|
|
|
+ return LOG_DAEMON;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_ftp )
|
|
|
+ {
|
|
|
+ return LOG_FTP;
|
|
|
+ }
|
|
|
+#ifdef __APPLE__
|
|
|
+ else if ( hash == hash_install )
|
|
|
+ {
|
|
|
+ return LOG_INSTALL;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ else if ( hash == hash_kern )
|
|
|
+ {
|
|
|
+ return LOG_KERN;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_lpr )
|
|
|
+ {
|
|
|
+ return LOG_LPR;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_mail )
|
|
|
+ {
|
|
|
+ return LOG_MAIL;
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ else if ( hash == hash_mark )
|
|
|
+ {
|
|
|
+ //this is internal for all OS
|
|
|
+ return INTERNAL_MARK;
|
|
|
+ }
|
|
|
+ */
|
|
|
+#ifdef __APPLE__
|
|
|
+ else if ( hash == hash_netinfo )
|
|
|
+ {
|
|
|
+ return LOG_NETINFO;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_ras )
|
|
|
+ {
|
|
|
+ return LOG_RAS;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_remoteauth )
|
|
|
+ {
|
|
|
+ return LOG_REMOTEAUTH;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ else if ( hash == hash_news )
|
|
|
+ {
|
|
|
+ return LOG_NEWS;
|
|
|
+ }
|
|
|
+#ifdef __FreeBSD__
|
|
|
+ else if ( hash == hash_ntp )
|
|
|
+ {
|
|
|
+ return LOG_NTP;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ else if ( hash == hash_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 ( hash == hash_syslog )
|
|
|
+ {
|
|
|
+ return LOG_SYSLOG;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_user )
|
|
|
+ {
|
|
|
+ return LOG_USER;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_uucp )
|
|
|
+ {
|
|
|
+ return LOG_UUCP;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_local0 )
|
|
|
+ {
|
|
|
+ return LOG_LOCAL0;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_local1 )
|
|
|
+ {
|
|
|
+ return LOG_LOCAL1;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_local2 )
|
|
|
+ {
|
|
|
+ return LOG_LOCAL2;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_local3 )
|
|
|
+ {
|
|
|
+ return LOG_LOCAL3;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_local4 )
|
|
|
+ {
|
|
|
+ return LOG_LOCAL4;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_local5 )
|
|
|
+ {
|
|
|
+ return LOG_LOCAL5;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_local6 )
|
|
|
+ {
|
|
|
+ return LOG_LOCAL6;
|
|
|
+ }
|
|
|
+ else if ( hash == hash_local7 )
|
|
|
+ {
|
|
|
+ return LOG_LOCAL7;
|
|
|
+ }
|
|
|
+#ifdef __APPLE__
|
|
|
+ else if ( hash == hash_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() {
|
|
|
static int i = 0;
|
|
|
|
|
|
if(!i) {
|
|
|
- openlog(program_name, LOG_PID, LOG_DAEMON);
|
|
|
+ openlog(program_name, LOG_PID,log_facility_id(facility_log));
|
|
|
i = 1;
|
|
|
}
|
|
|
}
|
|
@@ -70,7 +485,8 @@ 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();
|
|
|
+
|
|
|
+ syslog_init();
|
|
|
if(enabled_syslog) *enabled_syslog = 1;
|
|
|
}
|
|
|
else if(enabled_syslog) *enabled_syslog = 0;
|