void rspamd_common_logv (rspamd_logger_t *rspamd_log, GLogLevelFlags log_level, const gchar *module, const gchar *id, const gchar *function, const gchar *fmt, va_list args) { gchar logbuf[RSPAMD_LOGBUF_SIZE]; if (rspamd_log == NULL) { rspamd_log = default_logger; } if (rspamd_log == NULL) { /* Just fprintf message to stderr */ if (log_level >= G_LOG_LEVEL_INFO) { rspamd_vsnprintf (logbuf, sizeof (logbuf), fmt, args); rspamd_escape_log_string (logbuf); fprintf (stderr, "%s\n", logbuf); } } else { if (rspamd_logger_need_log (rspamd_log, log_level, module)) { rspamd_vsnprintf (logbuf, sizeof (logbuf), fmt, args); rspamd_escape_log_string (logbuf); rspamd_mempool_lock_mutex (rspamd_log->mtx); rspamd_log->log_func (NULL, module, id, function, log_level, logbuf, FALSE, rspamd_log); rspamd_mempool_unlock_mutex (rspamd_log->mtx); } switch (log_level) { case G_LOG_LEVEL_CRITICAL: rspamd_log->log_cnt[0] ++; break; case G_LOG_LEVEL_WARNING: rspamd_log->log_cnt[1]++; break; case G_LOG_LEVEL_INFO: rspamd_log->log_cnt[2]++; break; case G_LOG_LEVEL_DEBUG: rspamd_log->log_cnt[3]++; break; default: break; } } }
/** * Write log line depending on ip */ void 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]; va_list vp; u_char *end; if (rspamd_log == NULL) { rspamd_log = default_logger; } if (rspamd_logger_need_log (rspamd_log, G_LOG_LEVEL_DEBUG, module) || 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); } }
gchar * make_smtp_error (rspamd_mempool_t *pool, gint error_code, const gchar *format, ...) { va_list vp; gchar *result = NULL, *p; size_t len; va_start (vp, format); len = g_printf_string_upper_bound (format, vp); va_end (vp); va_start (vp, format); len += sizeof ("65535 ") + sizeof (CRLF) - 1; result = rspamd_mempool_alloc (pool, len); p = result + rspamd_snprintf (result, len, "%d ", error_code); p = rspamd_vsnprintf (p, len - (p - result), format, vp); *p++ = CR; *p++ = LF; *p = '\0'; va_end (vp); return result; }
void rspamd_common_logv (rspamd_logger_t *rspamd_log, gint level_flags, const gchar *module, const gchar *id, const gchar *function, const gchar *fmt, va_list args) { gchar logbuf[RSPAMD_LOGBUF_SIZE], *end; gint level = level_flags & (RSPAMD_LOG_LEVEL_MASK & G_LOG_LEVEL_MASK); if (rspamd_log == NULL) { rspamd_log = default_logger; } if (rspamd_log == NULL) { /* Just fprintf message to stderr */ if (level >= G_LOG_LEVEL_INFO) { rspamd_vsnprintf (logbuf, sizeof (logbuf), fmt, args); fprintf (stderr, "%s\n", logbuf); } } else { if (rspamd_logger_need_log (rspamd_log, level, module)) { end = rspamd_vsnprintf (logbuf, sizeof (logbuf), fmt, args); if ((level_flags & RSPAMD_LOG_ENCRYPTED) && rspamd_log->pk) { gchar *encrypted; encrypted = rspamd_log_encrypt_message (logbuf, end, rspamd_log); rspamd_log->log_func (module, id, function, level_flags, encrypted, rspamd_log); g_free (encrypted); } else { rspamd_log->log_func (module, id, function, level_flags, logbuf, rspamd_log); } switch (level) { case G_LOG_LEVEL_CRITICAL: rspamd_log->log_cnt[0] ++; break; case G_LOG_LEVEL_WARNING: rspamd_log->log_cnt[1]++; break; case G_LOG_LEVEL_INFO: rspamd_log->log_cnt[2]++; break; case G_LOG_LEVEL_DEBUG: rspamd_log->log_cnt[3]++; break; default: break; } } } }