diff options
Diffstat (limited to 'src/libutil/logger.c')
-rw-r--r-- | src/libutil/logger.c | 75 |
1 files changed, 58 insertions, 17 deletions
diff --git a/src/libutil/logger.c b/src/libutil/logger.c index d023b7ab2..cb1e39209 100644 --- a/src/libutil/logger.c +++ b/src/libutil/logger.c @@ -69,6 +69,7 @@ struct rspamd_logger_error_log { */ struct rspamd_logger_s { rspamd_log_func_t log_func; + gpointer log_arg; enum rspamd_log_type log_type; gint log_facility; gint log_level; @@ -116,14 +117,16 @@ static rspamd_logger_t *default_logger = NULL; static struct rspamd_log_modules *log_modules = NULL; static void syslog_log_function (const gchar *module, - const gchar *id, const gchar *function, - gint log_level, const gchar *message, gsize mlen, - gpointer arg); + const gchar *id, const gchar *function, + gint log_level, const gchar *message, gsize mlen, + rspamd_logger_t *logger, + gpointer arg); static void file_log_function (const gchar *module, - const gchar *id, const gchar *function, - gint log_level, const gchar *message, gsize mlen, - gpointer arg); + const gchar *id, const gchar *function, + gint log_level, const gchar *message, gsize mlen, + rspamd_logger_t *logger, + gpointer arg); guint rspamd_task_log_id = (guint)-1; RSPAMD_CONSTRUCTOR(rspamd_task_log_init) @@ -397,7 +400,8 @@ rspamd_log_reset_repeated (rspamd_logger_t *rspamd_log) rspamd_log->saved_loglevel | RSPAMD_LOG_FORCED, rspamd_log->saved_message, rspamd_log->saved_mlen, - rspamd_log); + rspamd_log, + rspamd_log->log_arg); g_free (rspamd_log->saved_message); g_free (rspamd_log->saved_function); @@ -415,7 +419,8 @@ rspamd_log_reset_repeated (rspamd_logger_t *rspamd_log) rspamd_log->saved_loglevel | RSPAMD_LOG_FORCED, tmpbuf, r, - rspamd_log); + rspamd_log, + rspamd_log->log_arg); } } } @@ -851,7 +856,8 @@ rspamd_common_logv (rspamd_logger_t *rspamd_log, gint level_flags, level_flags, encrypted, enc_len, - rspamd_log); + rspamd_log, + rspamd_log->log_arg); g_free (encrypted); } else { @@ -860,7 +866,8 @@ rspamd_common_logv (rspamd_logger_t *rspamd_log, gint level_flags, level_flags, logbuf, end - logbuf, - rspamd_log); + rspamd_log, + rspamd_log->log_arg); } switch (level) { @@ -990,9 +997,9 @@ syslog_log_function (const gchar *module, const gchar *id, gint level_flags, const gchar *message, gsize mlen, + rspamd_logger_t *rspamd_log, gpointer arg) { - rspamd_logger_t *rspamd_log = arg; #ifdef HAVE_SYSLOG_H struct { GLogLevelFlags glib_level; @@ -1058,6 +1065,7 @@ file_log_function (const gchar *module, const gchar *id, gint level_flags, const gchar *message, gsize mlen, + rspamd_logger_t *rspamd_log, gpointer arg) { static gchar timebuf[64], modulebuf[64]; @@ -1071,7 +1079,6 @@ file_log_function (const gchar *module, const gchar *id, size_t mremain; const gchar *cptype = NULL; gboolean got_time = FALSE; - rspamd_logger_t *rspamd_log = arg; if (!(level_flags & RSPAMD_LOG_FORCED) && !rspamd_log->enabled) { return; @@ -1132,6 +1139,7 @@ file_log_function (const gchar *module, const gchar *id, rspamd_log->saved_loglevel, rspamd_log->saved_message, rspamd_log->saved_mlen, + rspamd_log, arg); g_free (rspamd_log->saved_message); @@ -1150,6 +1158,7 @@ file_log_function (const gchar *module, const gchar *id, rspamd_log->saved_loglevel, tmpbuf, r, + rspamd_log, arg); file_log_function (module, id, @@ -1157,6 +1166,7 @@ file_log_function (const gchar *module, const gchar *id, level_flags, message, mlen, + rspamd_log, arg); rspamd_log->repeats = REPEATS_MIN + 1; @@ -1181,6 +1191,7 @@ file_log_function (const gchar *module, const gchar *id, rspamd_log->saved_loglevel, rspamd_log->saved_message, rspamd_log->saved_mlen, + rspamd_log, arg); g_free (rspamd_log->saved_message); @@ -1198,6 +1209,7 @@ file_log_function (const gchar *module, const gchar *id, level_flags, tmpbuf, r, + rspamd_log, arg); /* It is safe to use temporary buffer here as it is not static */ file_log_function (module, id, @@ -1205,6 +1217,7 @@ file_log_function (const gchar *module, const gchar *id, level_flags, message, mlen, + rspamd_log, arg); return; } @@ -1395,7 +1408,8 @@ rspamd_conditional_debug (rspamd_logger_t *rspamd_log, G_LOG_LEVEL_DEBUG | RSPAMD_LOG_FORCED, logbuf, end - logbuf, - rspamd_log); + rspamd_log, + rspamd_log->log_arg); } } @@ -1431,7 +1445,8 @@ rspamd_conditional_debug_fast (rspamd_logger_t *rspamd_log, G_LOG_LEVEL_DEBUG | RSPAMD_LOG_FORCED, logbuf, end - logbuf, - rspamd_log); + rspamd_log, + rspamd_log->log_arg); } } @@ -1468,7 +1483,8 @@ rspamd_conditional_debug_fast_num_id (rspamd_logger_t *rspamd_log, G_LOG_LEVEL_DEBUG | RSPAMD_LOG_FORCED, logbuf, end - logbuf, - rspamd_log); + rspamd_log, + rspamd_log->log_arg); } } @@ -1481,7 +1497,7 @@ rspamd_glib_log_function (const gchar *log_domain, const gchar *message, gpointer arg) { - rspamd_logger_t *rspamd_log = arg; + rspamd_logger_t *rspamd_log = (rspamd_logger_t *)arg; if (rspamd_log->enabled && rspamd_logger_need_log (rspamd_log, log_level, -1)) { @@ -1490,7 +1506,8 @@ rspamd_glib_log_function (const gchar *log_domain, log_level, message, strlen (message), - rspamd_log); + rspamd_log, + rspamd_log->log_arg); } } @@ -1688,4 +1705,28 @@ rspamd_logger_t* rspamd_logger_get_singleton (void) { return default_logger; +} + +rspamd_log_func_t +rspamd_logger_set_log_function (rspamd_logger_t *logger, + rspamd_log_func_t nfunc, + gpointer narg, + gpointer *old_arg) +{ + if (logger == NULL) { + logger = default_logger; + } + + g_assert (logger != NULL); + + if (old_arg) { + *old_arg = logger->log_arg; + } + + rspamd_log_func_t old_func = logger->log_func; + + logger->log_func = nfunc; + logger->log_arg = narg; + + return old_func; }
\ No newline at end of file |