39typedef enum xtc_log_level {
48typedef struct xtc_log xtc_log_t;
52typedef int (*xtc_log_sink_fn)(
void *user, xtc_log_level_t lvl,
53 const char *buf,
size_t len);
55typedef struct xtc_log_opts {
58 xtc_log_level_t floor;
64#define XTC_LOG_OPTS_DEFAULT { \
67 .floor = XTC_LOG_INFO, \
88void xtc_log_destroy(xtc_log_t *log);
90int xtc_log_set_floor(xtc_log_t *log, xtc_log_level_t lvl);
95int xtc_log_set_default(xtc_log_t *log);
96xtc_log_t *xtc_log_default(
void);
100#if defined(__GNUC__) || defined(__clang__)
101# define XTC_LOG_PRINTF_FMT __attribute__((format(printf, 3, 4)))
103# define XTC_LOG_PRINTF_FMT
105void xtc_log_write(xtc_log_t *log, xtc_log_level_t lvl,
106 const char *fmt, ...)
108void xtc_log_vwrite(xtc_log_t *log, xtc_log_level_t lvl,
109 const
char *fmt, va_list ap);
115int xtc_log_drain(xtc_log_t *log);
118int xtc_log_drop_count(const xtc_log_t *log);
123#define XTC_LOG(lvl, ...) \
124 xtc_log_write(xtc_log_default(), (lvl), __VA_ARGS__)
125#define XTC_LOG_TRACE_F(...) XTC_LOG(XTC_LOG_TRACE, __VA_ARGS__)
126#define XTC_LOG_DEBUG_F(...) XTC_LOG(XTC_LOG_DEBUG, __VA_ARGS__)
127#define XTC_LOG_INFO_F(...) XTC_LOG(XTC_LOG_INFO, __VA_ARGS__)
128#define XTC_LOG_WARN_F(...) XTC_LOG(XTC_LOG_WARN, __VA_ARGS__)
129#define XTC_LOG_ERROR_F(...) XTC_LOG(XTC_LOG_ERROR, __VA_ARGS__)
130#define XTC_LOG_FATAL_F(...) XTC_LOG(XTC_LOG_FATAL, __VA_ARGS__)