xref: /unit/src/nxt_log.h (revision 0:a63ceefd6ab0)
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) NGINX, Inc.
5  */
6 
7 #ifndef _NXT_LOG_H_INCLUDED_
8 #define _NXT_LOG_H_INCLUDED_
9 
10 
11 #define NXT_LOG_EMERG      0
12 #define NXT_LOG_ALERT      1
13 #define NXT_LOG_CRIT       2
14 #define NXT_LOG_ERR        3
15 #define NXT_LOG_WARN       4
16 #define NXT_LOG_NOTICE     5
17 #define NXT_LOG_INFO       6
18 #define NXT_LOG_DEBUG      7
19 
20 
21 #define NXT_MAX_ERROR_STR  2048
22 
23 
24 typedef void nxt_cdecl (*nxt_log_handler_t)(nxt_uint_t level, nxt_log_t *log,
25     const char *fmt, ...);
26 typedef u_char *(*nxt_log_ctx_handler_t)(void *ctx, u_char *pos, u_char *end);
27 
28 
29 struct nxt_log_s {
30     uint32_t               level;
31     uint32_t               ident;
32     nxt_log_handler_t      handler;
33     nxt_log_ctx_handler_t  ctx_handler;
34     void                   *ctx;
35 };
36 
37 
38 NXT_EXPORT void nxt_log_start(const char *name);
39 NXT_EXPORT nxt_log_t *nxt_log_set_ctx(nxt_log_t *log,
40     nxt_log_ctx_handler_t handler, void *ctx);
41 
42 NXT_EXPORT void nxt_cdecl nxt_log_handler(nxt_uint_t level, nxt_log_t *log,
43     const char *fmt, ...);
44 
45 
46 #define                                                                       \
47 nxt_log_level_enough(log, level)                                              \
48     ((log)->level >= (level))
49 
50 
51 #define                                                                       \
52 nxt_log_emerg(_log, ...)                                                      \
53     do {                                                                      \
54         nxt_log_t  *_log_ = (_log);                                           \
55                                                                               \
56         _log_->handler(NXT_LOG_EMERG, _log_, __VA_ARGS__);                    \
57     } while (0)
58 
59 
60 #define                                                                       \
61 nxt_log_alert(_log, ...)                                                      \
62     do {                                                                      \
63         nxt_log_t  *_log_ = (_log);                                           \
64                                                                               \
65         _log_->handler(NXT_LOG_ALERT, _log_, __VA_ARGS__);                    \
66     } while (0)
67 
68 
69 #define                                                                       \
70 nxt_log_error(_level, _log, ...)                                              \
71     do {                                                                      \
72         nxt_log_t   *_log_ = (_log);                                          \
73         nxt_uint_t  _level_ = (_level);                                       \
74                                                                               \
75         if (nxt_slow_path(_log_->level >= _level_)) {                         \
76             _log_->handler(_level_, _log_, __VA_ARGS__);                      \
77         }                                                                     \
78     } while (0)
79 
80 
81 #if (NXT_DEBUG)
82 
83 #define                                                                       \
84 nxt_log_debug(_log, ...)                                                      \
85     do {                                                                      \
86         nxt_log_t  *_log_ = (_log);                                           \
87                                                                               \
88         if (nxt_slow_path(_log_->level == NXT_LOG_DEBUG || nxt_debug)) {      \
89             _log_->handler(NXT_LOG_DEBUG, _log_, __VA_ARGS__);                \
90         }                                                                     \
91     } while (0)
92 
93 #else
94 
95 #define                                                                       \
96 nxt_log_debug(...)
97 
98 #endif
99 
100 
101 #define                                                                       \
102 nxt_main_log_emerg(...)                                                       \
103     nxt_log_emerg(&nxt_main_log, __VA_ARGS__)
104 
105 
106 #define                                                                       \
107 nxt_main_log_alert(...)                                                       \
108     nxt_log_alert(&nxt_main_log, __VA_ARGS__)
109 
110 
111 #define                                                                       \
112 nxt_main_log_error(level, ...)                                                \
113     nxt_log_error(level, &nxt_main_log, __VA_ARGS__)
114 
115 
116 #define                                                                       \
117 nxt_main_log_debug(...)                                                       \
118     nxt_log_debug(&nxt_main_log, __VA_ARGS__)
119 
120 
121 NXT_EXPORT extern nxt_uint_t  nxt_debug;
122 NXT_EXPORT extern nxt_log_t   nxt_main_log;
123 NXT_EXPORT extern nxt_str_t   nxt_log_levels[];
124 
125 
126 #endif /* _NXT_LOG_H_INCLUDED_ */
127