/* * Copyright (C) Igor Sysoev * Copyright (C) NGINX, Inc. */ #ifndef _NJS_TRACE_H_INCLUDED_ #define _NJS_TRACE_H_INCLUDED_ typedef enum { NJS_LEVEL_CRIT = 0, NJS_LEVEL_ERROR, NJS_LEVEL_WARN, NJS_LEVEL_INFO, NJS_LEVEL_TRACE, } njs_trace_level_t; typedef struct { uint32_t level; u_char *end; const char *fmt; va_list args; } njs_trace_data_t; typedef struct njs_trace_s njs_trace_t; typedef u_char *(*njs_trace_handler_t)(njs_trace_t *trace, njs_trace_data_t *td, u_char *start); struct njs_trace_s { uint32_t level; uint32_t size; njs_trace_handler_t handler; void *data; njs_trace_t *prev; njs_trace_t *next; }; #define njs_alert(_trace, _level, ...) \ do { \ njs_trace_t *_trace_ = _trace; \ uint32_t _level_ = _level; \ \ if (njs_slow_path(_trace_->level >= _level_)) { \ njs_trace_handler(_trace_, _level_, __VA_ARGS__); \ } \ } while (0) #define njs_trace(_trace, ...) \ do { \ njs_trace_t *_trace_ = _trace; \ \ if (njs_slow_path(_trace_->level == NJS_LEVEL_TRACE)) { \ njs_trace_handler(_trace_, NJS_LEVEL_TRACE, __VA_ARGS__); \ } \ } while (0) #define njs_thread_log_alert(...) #define njs_thread_log_error(...) #define njs_log_error(...) #define njs_thread_log_debug(...) NJS_EXPORT void njs_trace_handler(njs_trace_t *trace, uint32_t level, const char *fmt, ...); #endif /* _NJS_TRACE_H_INCLUDED_ */