diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-02-18 19:52:42 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-02-18 19:52:42 +0300 |
commit | 2dca592dce2fdde806af89e5cf036bd11bd4df61 (patch) | |
tree | e28591a7323cc0374dc336182954befd263cb6e5 | |
parent | f98132b90959ee6640e44ebdd2cc794a0d6c4bb8 (diff) | |
download | rspamd-2dca592dce2fdde806af89e5cf036bd11bd4df61.tar.gz rspamd-2dca592dce2fdde806af89e5cf036bd11bd4df61.zip |
* Improve logger initialization
-rw-r--r-- | src/main.c | 108 |
1 files changed, 66 insertions, 42 deletions
diff --git a/src/main.c b/src/main.c index 1a142c9f5..782f0acff 100644 --- a/src/main.c +++ b/src/main.c @@ -4,11 +4,11 @@ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY Rambler media ''AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -77,6 +77,53 @@ void sig_handler (int signo) } +static void +config_logger (struct rspamd_main *rspamd, gboolean is_fatal) +{ + switch (rspamd->cfg->log_type) { + case RSPAMD_LOG_CONSOLE: + if (!rspamd->cfg->no_fork) { + if (is_fatal) { + fprintf (stderr, "Cannot log to console while daemonized, disable logging"); + } + rspamd->cfg->log_fd = -1; + } + else { + rspamd->cfg->log_fd = 2; + } + g_log_set_default_handler (file_log_function, rspamd->cfg); + break; + case RSPAMD_LOG_FILE: + if (rspamd->cfg->log_file == NULL || open_log (rspamd->cfg) == -1) { + if (is_fatal) { + fprintf (stderr, "Fatal error, cannot open logfile, exiting"); + exit (EXIT_FAILURE); + } + else { + msg_err ("config_logger: cannot log to file, logfile unaccessable"); + } + } + else { + g_log_set_default_handler (file_log_function, rspamd->cfg); + } + break; + case RSPAMD_LOG_SYSLOG: + if (open_log (rspamd->cfg) == -1) { + if (is_fatal) { + fprintf (stderr, "Fatal error, cannot open syslog facility, exiting"); + exit (EXIT_FAILURE); + } + else { + msg_err ("config_logger: cannot log to syslog"); + } + } + else { + g_log_set_default_handler (syslog_log_function, rspamd->cfg); + } + break; + } +} + static struct rspamd_worker * fork_worker (struct rspamd_main *rspamd, int listen_sock, int reconfig, enum process_type type) { @@ -91,9 +138,9 @@ fork_worker (struct rspamd_main *rspamd, int listen_sock, int reconfig, enum pro if (reconfig) { tmp_cfg = (struct config_file *) g_malloc (sizeof (struct config_file)); if (tmp_cfg) { - bzero (tmp_cfg, sizeof (struct config_file)); + bzero (tmp_cfg, sizeof (struct config_file)); tmp_cfg->cfg_pool = memory_pool_new (32768); - cfg_file = memory_pool_strdup (tmp_cfg->cfg_pool, rspamd->cfg->cfg_name); + cfg_file = memory_pool_strdup (tmp_cfg->cfg_pool, rspamd->cfg->cfg_name); f = fopen (rspamd->cfg->cfg_name , "r"); if (f == NULL) { msg_warn ("fork_worker: cannot open file: %s", rspamd->cfg->cfg_name ); @@ -107,10 +154,11 @@ fork_worker (struct rspamd_main *rspamd, int listen_sock, int reconfig, enum pro fclose (f); } else { - free_config (rspamd->cfg); + free_config (rspamd->cfg); g_free (rspamd->cfg); rspamd->cfg = tmp_cfg; - rspamd->cfg->cfg_name = cfg_file; + rspamd->cfg->cfg_name = cfg_file; + config_logger (rspamd, FALSE); } } } @@ -211,9 +259,9 @@ main (int argc, char **argv, char **env) rspamd->cfg->cfg_name = memory_pool_strdup (rspamd->cfg->cfg_pool, FIXED_CONFIG_FILE); read_cmd_line (argc, argv, rspamd->cfg); - - /* First set logger to console logger */ - cfg->log_fd = 2; + + /* First set logger to console logger */ + cfg->log_fd = 2; g_log_set_default_handler (file_log_function, cfg); #ifndef HAVE_SETPROCTITLE @@ -233,45 +281,21 @@ main (int argc, char **argv, char **env) } fclose (f); - msg_info ("main: starting..."); + + config_logger (rspamd, TRUE); + + msg_info ("main: starting..."); rspamd->cfg->cfg_name = memory_pool_strdup (rspamd->cfg->cfg_pool, rspamd->cfg->cfg_name ); /* Strictly set temp dir */ - if (!rspamd->cfg->temp_dir) { + if (!rspamd->cfg->temp_dir) { msg_warn ("main: tempdir is not set, trying to use $TMPDIR"); rspamd->cfg->temp_dir = memory_pool_strdup (rspamd->cfg->cfg_pool, getenv ("TMPDIR")); if (!rspamd->cfg->temp_dir) { msg_warn ("main: $TMPDIR is empty too, using /tmp as default"); - rspamd->cfg->temp_dir = memory_pool_strdup (rspamd->cfg->cfg_pool, "/tmp"); + rspamd->cfg->temp_dir = memory_pool_strdup (rspamd->cfg->cfg_pool, "/tmp"); } - } - - switch (cfg->log_type) { - case RSPAMD_LOG_CONSOLE: - if (!rspamd->cfg->no_fork) { - fprintf (stderr, "Cannot log to console while daemonized, disable logging"); - cfg->log_fd = -1; - } - else { - cfg->log_fd = 2; - } - g_log_set_default_handler (file_log_function, cfg); - break; - case RSPAMD_LOG_FILE: - if (cfg->log_file == NULL || open_log (cfg) == -1) { - fprintf (stderr, "Fatal error, cannot open logfile, exiting"); - exit (EXIT_FAILURE); - } - g_log_set_default_handler (file_log_function, cfg); - break; - case RSPAMD_LOG_SYSLOG: - if (open_log (cfg) == -1) { - fprintf (stderr, "Fatal error, cannot open syslog facility, exiting"); - exit (EXIT_FAILURE); - } - g_log_set_default_handler (syslog_log_function, cfg); - break; } if (!rspamd->cfg->no_fork && daemon (1, 1) == -1) { |