From: Vsevolod Stakhov Date: Sat, 20 Jan 2018 12:53:56 +0000 (+0000) Subject: [Project] Use fast debug logging check X-Git-Tag: 1.7.0~262 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=303d3e7797a58524d0bbba9269314e54efe8a14c;p=rspamd.git [Project] Use fast debug logging check --- diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c index 78992f984..a0acb53b9 100644 --- a/src/libserver/cfg_utils.c +++ b/src/libserver/cfg_utils.c @@ -654,6 +654,7 @@ rspamd_config_post_load (struct rspamd_config *cfg, # else clock_getres (CLOCK_REALTIME, &ts); # endif + rspamd_logger_configure_modules (cfg->debug_modules); cfg->clock_res = log10 (1000000. / ts.tv_nsec); if (cfg->clock_res < 0) { diff --git a/src/libutil/logger.c b/src/libutil/logger.c index bc9cb3a46..d69c0f038 100644 --- a/src/libutil/logger.c +++ b/src/libutil/logger.c @@ -28,6 +28,7 @@ #define REPEATS_MIN 3 #define REPEATS_MAX 300 #define LOG_ID 6 +#define LOGBUF_LEN 8192 struct rspamd_log_module { gchar *mname; @@ -36,8 +37,8 @@ struct rspamd_log_module { struct rspamd_log_modules { guchar *bitset; - guint bitset_len; - guint bitset_allocated; + guint bitset_len; /* Number of BITS used in bitset */ + guint bitset_allocated; /* Size of bitset allocated in BYTES */ GHashTable *modules; }; @@ -433,7 +434,7 @@ rspamd_set_logger (struct rspamd_config *cfg, logger->io_buf.size = cfg->log_buf_size; } else { - logger->io_buf.size = BUFSIZ; + logger->io_buf.size = LOGBUF_LEN; } logger->is_buffered = TRUE; logger->io_buf.buf = g_malloc (logger->io_buf.size); @@ -520,7 +521,7 @@ rspamd_log_flush (rspamd_logger_t *rspamd_log) static inline gboolean rspamd_logger_need_log (rspamd_logger_t *rspamd_log, GLogLevelFlags log_level, - const gchar *module) + guint module_id) { g_assert (rspamd_log != NULL); @@ -528,10 +529,7 @@ rspamd_logger_need_log (rspamd_logger_t *rspamd_log, GLogLevelFlags log_level, return TRUE; } - if (rspamd_log->cfg->debug_modules != NULL && module != NULL && - g_hash_table_size (rspamd_log->cfg->debug_modules) > 0 && - g_hash_table_lookup (rspamd_log->cfg->debug_modules, module)) { - + if (module_id != (guint)-1 && isset (log_modules->bitset, module_id)) { return TRUE; } @@ -651,7 +649,7 @@ rspamd_common_logv (rspamd_logger_t *rspamd_log, gint level_flags, } } else { - if (rspamd_logger_need_log (rspamd_log, level, module)) { + if (rspamd_logger_need_log (rspamd_log, level, -1)) { end = rspamd_vsnprintf (logbuf, sizeof (logbuf), fmt, args); if ((level_flags & RSPAMD_LOG_ENCRYPTED) && rspamd_log->pk) { @@ -1116,15 +1114,18 @@ rspamd_conditional_debug (rspamd_logger_t *rspamd_log, rspamd_inet_addr_t *addr, const gchar *module, const gchar *id, const gchar *function, const gchar *fmt, ...) { - static gchar logbuf[BUFSIZ]; + static gchar logbuf[LOGBUF_LEN]; va_list vp; - u_char *end; + gchar *end; + guint mod_id; if (rspamd_log == NULL) { rspamd_log = default_logger; } - if (rspamd_logger_need_log (rspamd_log, G_LOG_LEVEL_DEBUG, module) || + mod_id = rspamd_logger_add_debug_module (module); + + if (rspamd_logger_need_log (rspamd_log, G_LOG_LEVEL_DEBUG, mod_id) || rspamd_log->is_debug) { if (rspamd_log->debug_ip && addr != NULL) { if (radix_find_compressed_addr (rspamd_log->debug_ip, addr) @@ -1145,6 +1146,41 @@ rspamd_conditional_debug (rspamd_logger_t *rspamd_log, } } +void +rspamd_conditional_debug_fast (rspamd_logger_t *rspamd_log, + rspamd_inet_addr_t *addr, + guint mod_id, const gchar *module, const gchar *id, + const gchar *function, const gchar *fmt, ...) +{ + static gchar logbuf[LOGBUF_LEN]; + va_list vp; + gchar *end; + + if (rspamd_log == NULL) { + rspamd_log = default_logger; + } + + if (rspamd_logger_need_log (rspamd_log, G_LOG_LEVEL_DEBUG, mod_id) || + rspamd_log->is_debug) { + if (rspamd_log->debug_ip && addr != NULL) { + if (radix_find_compressed_addr (rspamd_log->debug_ip, addr) + == RADIX_NO_VALUE) { + return; + } + } + + va_start (vp, fmt); + end = rspamd_vsnprintf (logbuf, sizeof (logbuf), fmt, vp); + *end = '\0'; + va_end (vp); + rspamd_log->log_func (module, id, + function, + G_LOG_LEVEL_DEBUG | RSPAMD_LOG_FORCED, + logbuf, + rspamd_log); + } +} + /** * Wrapper for glib logger */ @@ -1157,7 +1193,7 @@ rspamd_glib_log_function (const gchar *log_domain, rspamd_logger_t *rspamd_log = arg; if (rspamd_log->enabled && - rspamd_logger_need_log (rspamd_log, log_level, NULL)) { + rspamd_logger_need_log (rspamd_log, log_level, -1)) { rspamd_log->log_func ("glib", NULL, NULL, log_level, @@ -1321,6 +1357,7 @@ rspamd_logger_add_debug_module (const gchar *mname) m = g_malloc0 (sizeof (*m)); m->mname = g_strdup (mname); m->id = rspamd_logger_allocate_mod_bit (); + clrbit (log_modules->bitset, m->id); } return m->id; @@ -1341,6 +1378,7 @@ rspamd_logger_configure_modules (GHashTable *mods_enabled) } /* Now we have bit in our bitset available */ + memset (log_modules->bitset, 0, log_modules->bitset_allocated); g_hash_table_iter_init (&it, mods_enabled); while (g_hash_table_iter_next (&it, &k, &v)) { diff --git a/src/libutil/logger.h b/src/libutil/logger.h index 9c9ca209a..3f3f28ef6 100644 --- a/src/libutil/logger.h +++ b/src/libutil/logger.h @@ -121,7 +121,8 @@ void rspamd_conditional_debug (rspamd_logger_t *logger, const gchar *function, const gchar *fmt, ...); void rspamd_conditional_debug_fast (rspamd_logger_t *logger, - rspamd_inet_addr_t *addr, guint mod_id, const gchar *id, + rspamd_inet_addr_t *addr, + guint mod_id, const gchar *module, const gchar *id, const gchar *function, const gchar *fmt, ...); /**