ha_logd: New option to disable syslog logging As we already write ha-log and ha-debug, users might want to disable syslog logging.
Signed-off-by: Bernd Schubert <bschub...@ddn.com> diff --git a/logd/ha_logd.c b/logd/ha_logd.c --- a/logd/ha_logd.c +++ b/logd/ha_logd.c @@ -91,6 +91,7 @@ static struct { int log_facility; mode_t logmode; gboolean syslogfmtmsgs; + gboolean syslog; } logd_config = { .debugfile = "", @@ -98,7 +99,8 @@ static struct { .entity = "logd", .log_facility = HA_LOG_FACILITY, .logmode = 0644, - .syslogfmtmsgs = FALSE + .syslogfmtmsgs = FALSE, + .syslog = TRUE, }; static void logd_log(const char * fmt, ...) G_GNUC_PRINTF(1,2); @@ -109,6 +111,7 @@ static int set_entity(const char * optio static int set_sendqlen(const char * option); static int set_recvqlen(const char * option); static int set_logmode(const char * option); +static int set_syslog(const char* option); static int set_syslogfmtmsgs(const char * option); @@ -126,6 +129,7 @@ static struct directive { {"sendqlen", set_sendqlen}, {"recvqlen", set_recvqlen}, {"logmode", set_logmode}, + {"syslog", set_syslog}, {"syslogmsgfmt",set_syslogfmtmsgs} }; @@ -275,6 +279,26 @@ set_logmode(const char * option) logd_config.logmode = (mode_t)mode; return TRUE; } + +static int +set_syslog(const char* option) +{ + gboolean syslog; + + if (!option){ + return FALSE; + } + if (cl_str_to_boolean(option, &syslog) == HA_OK ) { + cl_log(LOG_INFO, "Setting syslog logging to %s", + syslog ? "enbled" : "disabled"); + logd_config.syslog = syslog; + } else + return FALSE; + + return TRUE; +} + + static int set_syslogfmtmsgs(const char * option) { @@ -918,20 +942,13 @@ main(int argc, char** argv, char** envp) set_ipc_time_debug_flag(FALSE); cl_log_set_uselogd(FALSE); + /* initialize early, so that we see our own errors on stdout */ + cl_log_enable_stderr(TRUE); if (!cfgfile && access(DEFAULT_CFG_FILE, F_OK) == 0) { cfgfile = DEFAULT_CFG_FILE; } - - - /* default one set to "logd" - * by setting facility, we enable syslog - */ - cl_log_enable_stderr(TRUE); - cl_log_set_entity(logd_config.entity); - cl_log_set_facility(logd_config.log_facility); - - + if (ask_status){ long pid; @@ -954,8 +971,6 @@ main(int argc, char** argv, char** envp) exit(LSB_EXIT_OK); } - logd_make_daemon(daemonize); - if (ipc_channel_pair(chanspair) != IPC_OK){ cl_perror("cannot create channel pair IPC"); @@ -969,15 +984,29 @@ main(int argc, char** argv, char** envp) exit(LSB_EXIT_NOTCONFIGED); } + if (!logd_config.syslog && logd_config.debugfile == EOS && + logd_config.logfile == EOS) { + cl_log(LOG_ERR, "Invalid config: No logfile defined and syslog disabled"); + exit(LSB_EXIT_EINVAL); + } + + /* + * by setting facility, we enable syslog + */ + if (logd_config.syslog) { + cl_log_set_entity(logd_config.entity); + cl_log_set_facility(logd_config.log_facility); + } + if (strlen(logd_config.debugfile) > 0) { cl_log_set_debugfile(logd_config.debugfile); } if (strlen(logd_config.logfile) > 0) { cl_log_set_logfile(logd_config.logfile); } - cl_log_set_entity(logd_config.entity); - cl_log_set_facility(logd_config.log_facility); + /* Only daemonize after setting up log files */ + logd_make_daemon(daemonize); cl_log(LOG_INFO, "logd started with %s.", cfgfile ? cfgfile : "default configuration"); diff --git a/logd/logd.cf b/logd/logd.cf --- a/logd/logd.cf +++ b/logd/logd.cf @@ -41,4 +41,6 @@ # #recvqlen 256 - +# Do we log to syslog? +# Default: yes +#syslog yes _______________________________________________ Pacemaker mailing list: Pacemaker@oss.clusterlabs.org http://oss.clusterlabs.org/mailman/listinfo/pacemaker Project Home: http://www.clusterlabs.org Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf Bugs: http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker