1 #ifndef _QRTR_LOGGING_H_
2 #define _QRTR_LOGGING_H_
3 
4 #include <stdbool.h>
5 #include <stdlib.h>
6 #include <syslog.h>
7 
8 #if defined(__GNUC__) || defined(__clang__)
9 #define __PRINTF__(fmt, args) __attribute__((format(__printf__, fmt, args)))
10 #else
11 #define __PRINTF__(fmt, args)
12 #endif
13 
14 void qlog_setup(const char *tag, bool use_syslog);
15 void qlog_set_min_priority(int priority);
16 
17 void qlog(int priority, const char *format, ...) __PRINTF__(2, 3);
18 
19 #define LOGD(fmt, ...) qlog(LOG_DEBUG, fmt, ##__VA_ARGS__)
20 
21 #define LOGW(fmt, ...) qlog(LOG_WARNING, fmt, ##__VA_ARGS__)
22 #define PLOGW(fmt, ...) \
23 	qlog(LOG_WARNING, fmt ": %s", ##__VA_ARGS__, strerror(errno))
24 
25 #define LOGE(fmt, ...) qlog(LOG_ERR, fmt, ##__VA_ARGS__)
26 #define PLOGE(fmt, ...) qlog(LOG_ERR, fmt ": %s", ##__VA_ARGS__, strerror(errno))
27 #define LOGE_AND_EXIT(fmt, ...) do {			\
28 		qlog(LOG_ERR, fmt, ##__VA_ARGS__);	\
29 		exit(1);				\
30 	} while(0)
31 #define PLOGE_AND_EXIT(fmt, ...) do {						\
32 		qlog(LOG_ERR, fmt ": %s", ##__VA_ARGS__, strerror(errno));	\
33 		exit(1);							\
34 	} while(0)
35 
36 #endif
37