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 24typedef void nxt_cdecl (*nxt_log_handler_t)(nxt_uint_t level, nxt_log_t *log, 25 const char *fmt, ...); 26typedef u_char *(*nxt_log_ctx_handler_t)(void *ctx, u_char *pos, u_char *end); 27 28 29struct 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 38NXT_EXPORT void nxt_log_start(const char *name); 39NXT_EXPORT nxt_log_t *nxt_log_set_ctx(nxt_log_t *log, 40 nxt_log_ctx_handler_t handler, void *ctx); 41 42NXT_EXPORT void nxt_cdecl nxt_log_handler(nxt_uint_t level, nxt_log_t *log, 43 const char *fmt, ...); 44 45 46#define \ 47nxt_log_level_enough(log, level) \ 48 ((log)->level >= (level)) 49 50 51#define \ 52nxt_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 \ 61nxt_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 nxt_log(task, _level, ...) \ 70 do { \ 71 nxt_log_t *log = (task)->log; \ 72 nxt_uint_t _level_ = (_level); \ 73 \ 74 if (nxt_slow_path(log->level >= _level_)) { \ 75 log->handler(_level_, log, __VA_ARGS__); \ 76 } \ 77 } while (0) 78 79 80#define nxt_trace(task, ...) \ 81 do { \ 82 nxt_log_t *log = (task)->log; \ 83 \ 84 if (nxt_slow_path(log->level >= NXT_LOG_NOTICE || nxt_trace)) { \ 85 log->handler(NXT_LOG_NOTICE, log, __VA_ARGS__); \ 86 } \ 87 } while (0) 88 89 90#define \ 91nxt_log_error(_level, _log, ...) \ 92 do { \ 93 nxt_log_t *_log_ = (_log); \ 94 nxt_uint_t _level_ = (_level); \ 95 \ 96 if (nxt_slow_path(_log_->level >= _level_)) { \ 97 _log_->handler(_level_, _log_, __VA_ARGS__); \ 98 } \ 99 } while (0) 100 101 102#if (NXT_DEBUG) 103 104#define nxt_debug(task, ...) \ 105 do { \ 106 nxt_log_t *log = (task)->log; \ 107 \ 108 if (nxt_slow_path(log->level == NXT_LOG_DEBUG || nxt_debug)) { \ 109 log->handler(NXT_LOG_DEBUG, log, __VA_ARGS__); \ 110 } \ 111 } while (0) 112 113 114#define \ 115nxt_log_debug(_log, ...) \ 116 do { \ 117 nxt_log_t *_log_ = (_log); \ 118 \ 119 if (nxt_slow_path(_log_->level == NXT_LOG_DEBUG || nxt_debug)) { \ 120 _log_->handler(NXT_LOG_DEBUG, _log_, __VA_ARGS__); \ 121 } \ 122 } while (0) 123 124
| 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 24typedef void nxt_cdecl (*nxt_log_handler_t)(nxt_uint_t level, nxt_log_t *log, 25 const char *fmt, ...); 26typedef u_char *(*nxt_log_ctx_handler_t)(void *ctx, u_char *pos, u_char *end); 27 28 29struct 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 38NXT_EXPORT void nxt_log_start(const char *name); 39NXT_EXPORT nxt_log_t *nxt_log_set_ctx(nxt_log_t *log, 40 nxt_log_ctx_handler_t handler, void *ctx); 41 42NXT_EXPORT void nxt_cdecl nxt_log_handler(nxt_uint_t level, nxt_log_t *log, 43 const char *fmt, ...); 44 45 46#define \ 47nxt_log_level_enough(log, level) \ 48 ((log)->level >= (level)) 49 50 51#define \ 52nxt_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 \ 61nxt_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 nxt_log(task, _level, ...) \ 70 do { \ 71 nxt_log_t *log = (task)->log; \ 72 nxt_uint_t _level_ = (_level); \ 73 \ 74 if (nxt_slow_path(log->level >= _level_)) { \ 75 log->handler(_level_, log, __VA_ARGS__); \ 76 } \ 77 } while (0) 78 79 80#define nxt_trace(task, ...) \ 81 do { \ 82 nxt_log_t *log = (task)->log; \ 83 \ 84 if (nxt_slow_path(log->level >= NXT_LOG_NOTICE || nxt_trace)) { \ 85 log->handler(NXT_LOG_NOTICE, log, __VA_ARGS__); \ 86 } \ 87 } while (0) 88 89 90#define \ 91nxt_log_error(_level, _log, ...) \ 92 do { \ 93 nxt_log_t *_log_ = (_log); \ 94 nxt_uint_t _level_ = (_level); \ 95 \ 96 if (nxt_slow_path(_log_->level >= _level_)) { \ 97 _log_->handler(_level_, _log_, __VA_ARGS__); \ 98 } \ 99 } while (0) 100 101 102#if (NXT_DEBUG) 103 104#define nxt_debug(task, ...) \ 105 do { \ 106 nxt_log_t *log = (task)->log; \ 107 \ 108 if (nxt_slow_path(log->level == NXT_LOG_DEBUG || nxt_debug)) { \ 109 log->handler(NXT_LOG_DEBUG, log, __VA_ARGS__); \ 110 } \ 111 } while (0) 112 113 114#define \ 115nxt_log_debug(_log, ...) \ 116 do { \ 117 nxt_log_t *_log_ = (_log); \ 118 \ 119 if (nxt_slow_path(_log_->level == NXT_LOG_DEBUG || nxt_debug)) { \ 120 _log_->handler(NXT_LOG_DEBUG, _log_, __VA_ARGS__); \ 121 } \ 122 } while (0) 123 124
|
126 127#else 128 129#define nxt_debug(...) 130#define nxt_debug_alloc(...) 131 132#define \ 133nxt_log_debug(...) 134 135#endif 136 137 138#define \ 139nxt_main_log_emerg(...) \ 140 nxt_log_emerg(&nxt_main_log, __VA_ARGS__) 141 142 143#define \ 144nxt_main_log_alert(...) \ 145 nxt_log_alert(&nxt_main_log, __VA_ARGS__) 146 147 148#define \ 149nxt_main_log_error(level, ...) \ 150 nxt_log_error(level, &nxt_main_log, __VA_ARGS__) 151 152 153#define \ 154nxt_main_log_debug(...) \ 155 nxt_log_debug(&nxt_main_log, __VA_ARGS__) 156 157 158NXT_EXPORT extern nxt_uint_t nxt_debug; 159NXT_EXPORT extern nxt_uint_t nxt_trace; 160NXT_EXPORT extern nxt_log_t nxt_main_log; 161NXT_EXPORT extern nxt_str_t nxt_log_levels[]; 162 163 164#endif /* _NXT_LOG_H_INCLUDED_ */
| 127 128#else 129 130#define nxt_debug(...) 131#define nxt_debug_alloc(...) 132 133#define \ 134nxt_log_debug(...) 135 136#endif 137 138 139#define \ 140nxt_main_log_emerg(...) \ 141 nxt_log_emerg(&nxt_main_log, __VA_ARGS__) 142 143 144#define \ 145nxt_main_log_alert(...) \ 146 nxt_log_alert(&nxt_main_log, __VA_ARGS__) 147 148 149#define \ 150nxt_main_log_error(level, ...) \ 151 nxt_log_error(level, &nxt_main_log, __VA_ARGS__) 152 153 154#define \ 155nxt_main_log_debug(...) \ 156 nxt_log_debug(&nxt_main_log, __VA_ARGS__) 157 158 159NXT_EXPORT extern nxt_uint_t nxt_debug; 160NXT_EXPORT extern nxt_uint_t nxt_trace; 161NXT_EXPORT extern nxt_log_t nxt_main_log; 162NXT_EXPORT extern nxt_str_t nxt_log_levels[]; 163 164 165#endif /* _NXT_LOG_H_INCLUDED_ */
|