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