blob: 2bae4cefc82e15b048ef1f3ab95190189308f180 [file] [log] [blame]
/*
* 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_ */