You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

logger.h 3.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #ifndef RSPAMD_LOGGER_H
  2. #define RSPAMD_LOGGER_H
  3. #include "config.h"
  4. #include "cfg_file.h"
  5. #include "radix.h"
  6. #include "util.h"
  7. typedef void (*rspamd_log_func_t)(const gchar * log_domain, const gchar *function,
  8. GLogLevelFlags log_level, const gchar * message,
  9. gboolean forced, gpointer arg);
  10. typedef struct rspamd_logger_s rspamd_logger_t;
  11. /**
  12. * Init logger
  13. */
  14. void rspamd_set_logger (enum rspamd_log_type type, GQuark ptype, struct rspamd_main *main);
  15. /**
  16. * Open log file or initialize other structures
  17. */
  18. gint open_log (rspamd_logger_t *logger);
  19. /**
  20. * Close log file or destroy other structures
  21. */
  22. void close_log (rspamd_logger_t *logger);
  23. /**
  24. * Close and open log again
  25. */
  26. gint reopen_log (rspamd_logger_t *logger);
  27. /**
  28. * Open log file or initialize other structures for privileged processes
  29. */
  30. gint open_log_priv (rspamd_logger_t *logger, uid_t uid, gid_t gid);
  31. /**
  32. * Close log file or destroy other structures for privileged processes
  33. */
  34. void close_log_priv (rspamd_logger_t *logger, uid_t uid, gid_t gid);
  35. /**
  36. * Close and open log again for privileged processes
  37. */
  38. gint reopen_log_priv (rspamd_logger_t *logger, uid_t uid, gid_t gid);
  39. /**
  40. * Set log pid
  41. */
  42. void update_log_pid (GQuark ptype, rspamd_logger_t *logger);
  43. /**
  44. * Flush log buffer for some types of logging
  45. */
  46. void flush_log_buf (rspamd_logger_t *logger);
  47. /**
  48. * Log function that is compatible for glib messages
  49. */
  50. void rspamd_glib_log_function (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer arg);
  51. /**
  52. * Function with variable number of arguments support
  53. */
  54. void rspamd_common_log_function (rspamd_logger_t *logger, GLogLevelFlags log_level, const gchar *function, const gchar *fmt, ...);
  55. /**
  56. * Conditional debug function
  57. */
  58. void rspamd_conditional_debug (rspamd_logger_t *logger, guint32 addr, const gchar *function, const gchar *fmt, ...) ;
  59. /**
  60. * Temporary turn on debug
  61. */
  62. void rspamd_log_debug (rspamd_logger_t *logger);
  63. /**
  64. * Turn off debug
  65. */
  66. void rspamd_log_nodebug (rspamd_logger_t *logger);
  67. /* Typical functions */
  68. /* Logging in postfix style */
  69. #if (defined(RSPAMD_MAIN) || defined(RSPAMD_LIB) || defined(RSPAMD_TEST))
  70. #define msg_err(...) rspamd_common_log_function(rspamd_main->logger, G_LOG_LEVEL_CRITICAL, __FUNCTION__, __VA_ARGS__)
  71. #define msg_warn(...) rspamd_common_log_function(rspamd_main->logger, G_LOG_LEVEL_WARNING, __FUNCTION__, __VA_ARGS__)
  72. #define msg_info(...) rspamd_common_log_function(rspamd_main->logger, G_LOG_LEVEL_INFO, __FUNCTION__, __VA_ARGS__)
  73. #define msg_debug(...) rspamd_conditional_debug(rspamd_main->logger, -1, __FUNCTION__, __VA_ARGS__)
  74. #define debug_task(...) rspamd_conditional_debug(rspamd_main->logger, task->from_addr.s_addr, __FUNCTION__, __VA_ARGS__)
  75. #else
  76. #define msg_err(...) rspamd_fprintf(stderr, __VA_ARGS__)
  77. #define msg_warn(...) rspamd_fprintf(stderr, __VA_ARGS__)
  78. #define msg_info(...) rspamd_fprintf(stderr, __VA_ARGS__)
  79. #define msg_debug(...) rspamd_fprintf(stderr, __VA_ARGS__)
  80. #define debug_task(...) rspamd_fprintf(stderr, __VA_ARGS__)
  81. #endif
  82. #endif