]> source.dussan.org Git - rspamd.git/commitdiff
[Project] Use fast debug logging check
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 20 Jan 2018 12:53:56 +0000 (12:53 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 20 Jan 2018 12:53:56 +0000 (12:53 +0000)
src/libserver/cfg_utils.c
src/libutil/logger.c
src/libutil/logger.h

index 78992f9843444f6da080d7c3d765f47ea0fcf7ad..a0acb53b9c08ab1ec42945c3852da592480f0092 100644 (file)
@@ -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) {
index bc9cb3a461e5e55cd8454523e5211180a6459eb9..d69c0f038c551fad56c82f4bd3d093bb312c05fa 100644 (file)
@@ -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)) {
index 9c9ca209aadee7d8891d675225a1e3685768d2e9..3f3f28ef6c5f6a0e1ddd33618011f94835b9fe53 100644 (file)
@@ -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, ...);
 
 /**