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