xref: /unit/src/nxt_log_moderation.h (revision 2084:7d479274f334)
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) NGINX, Inc.
5  */
6 
7 #ifndef _NXT_LOG_MODERATION_H_INCLUDED_
8 #define _NXT_LOG_MODERATION_H_INCLUDED_
9 
10 
11 typedef struct {
12     uint32_t               level;
13     uint32_t               limit;
14     const char             *msg;
15     nxt_thread_spinlock_t  lock;
16     nxt_pid_t              pid;
17     nxt_uint_t             count;
18     nxt_time_t             last;
19     nxt_timer_t            timer;
20 } nxt_log_moderation_t;
21 
22 
23 #define NXT_LOG_MODERATION  0, -1, 0, 0, NXT_TIMER
24 
25 
26 #define nxt_log_alert_moderate(_mod, _log, ...)                               \
27     do {                                                                      \
28         nxt_log_t  *_log_ = _log;                                             \
29                                                                               \
30         if (nxt_log_moderate_allow(_mod)) {                                   \
31             _log_->handler(NXT_LOG_ALERT, _log_, __VA_ARGS__);                \
32         }                                                                     \
33     } while (0)
34 
35 
36 #define nxt_log_moderate(_mod, _level, _log, ...)                             \
37     do {                                                                      \
38         nxt_log_t  *_log_ = _log;                                             \
39                                                                               \
40         if (_log_->level >= (_level) && nxt_log_moderate_allow(_mod)) {       \
41             _log_->handler(_level, _log_, __VA_ARGS__);                       \
42         }                                                                     \
43     } while (0)
44 
45 
46 nxt_bool_t nxt_log_moderate_allow(nxt_log_moderation_t *mod);
47 
48 
49 #endif /* _NXT_LOG_MODERATION_H_INCLUDED_ */
50