34#include "xtc_export.h"
42typedef enum xtc_log_level {
51typedef struct xtc_log xtc_log_t;
55typedef int (*xtc_log_sink_fn)(
void *user, xtc_log_level_t lvl,
56 const char *buf,
size_t len);
58typedef struct xtc_log_opts {
62 xtc_log_level_t floor;
68#define XTC_LOG_OPTS_DEFAULT { \
69 .size = sizeof(xtc_log_opts_t), \
72 .floor = XTC_LOG_INFO, \
92XTC_API
int xtc_log_create(
const xtc_log_opts_t *opts, xtc_log_t **out);
93XTC_API
void xtc_log_destroy(xtc_log_t *log);
95XTC_API
int xtc_log_set_floor(xtc_log_t *log, xtc_log_level_t lvl);
100XTC_API
int xtc_log_set_default(xtc_log_t *log);
101XTC_API xtc_log_t *xtc_log_default(
void);
105#if defined(__GNUC__) || defined(__clang__)
106# define XTC_LOG_PRINTF_FMT __attribute__((format(printf, 3, 4)))
108# define XTC_LOG_PRINTF_FMT
110XTC_API
void xtc_log_write(xtc_log_t *log, xtc_log_level_t lvl,
111 const char *fmt, ...)
113XTC_API
void xtc_log_vwrite(xtc_log_t *log, xtc_log_level_t lvl,
114 const
char *fmt, va_list ap);
120XTC_API
int xtc_log_drain(xtc_log_t *log);
123XTC_API
int xtc_log_drop_count(const xtc_log_t *log);
128#define XTC_LOG(lvl, ...) \
129 xtc_log_write(xtc_log_default(), (lvl), __VA_ARGS__)
130#define XTC_LOG_TRACE_F(...) XTC_LOG(XTC_LOG_TRACE, __VA_ARGS__)
131#define XTC_LOG_DEBUG_F(...) XTC_LOG(XTC_LOG_DEBUG, __VA_ARGS__)
132#define XTC_LOG_INFO_F(...) XTC_LOG(XTC_LOG_INFO, __VA_ARGS__)
133#define XTC_LOG_WARN_F(...) XTC_LOG(XTC_LOG_WARN, __VA_ARGS__)
134#define XTC_LOG_ERROR_F(...) XTC_LOG(XTC_LOG_ERROR, __VA_ARGS__)
135#define XTC_LOG_FATAL_F(...) XTC_LOG(XTC_LOG_FATAL, __VA_ARGS__)