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