#define REPEATS_MIN 3
#define REPEATS_MAX 300
#define LOG_ID 6
+#define LOGBUF_LEN 8192
struct rspamd_log_module {
gchar *mname;
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;
};
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);
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);
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;
}
}
}
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) {
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)
}
}
+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
*/
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,
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;
}
/* 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)) {