usb_moded 0.86.0+mer64
usb_moded-log.h
Go to the documentation of this file.
1
25
26#ifndef USB_MODED_LOG_H_
27# define USB_MODED_LOG_H_
28
29# include <stdbool.h>
30# include <stdarg.h>
31# include <syslog.h>
32
33/* Logging functionality */
34
35/* ========================================================================= *
36 * Constants
37 * ========================================================================= */
38
39# define LOG_ENABLE_DEBUG 01
40# define LOG_ENABLE_TIMESTAMPS 01
41# define LOG_ENABLE_LEVELTAGS 01
42# define LOG_ENABLE_CONTEXT 0
43
44enum
45{
46 LOG_TO_STDERR, // log to stderr
47 LOG_TO_SYSLOG, // log to syslog
48};
49
50enum
51{
52 LOG_MIN_LEVEL = LOG_CRIT,
53 LOG_MAX_LEVEL = LOG_DEBUG,
54};
55
56/* ========================================================================= *
57 * CONTEXT STACK
58 * ========================================================================= */
59
60# if LOG_ENABLE_CONTEXT
61const char *context_enter(const char *func);
62void context_leave(void *aptr);
63
64# define LOG_REGISTER_CONTEXT\
65 __attribute__((cleanup(context_leave))) const char *qqq =\
66 context_enter(__func__)
67#else
68# define LOG_REGISTER_CONTEXT\
69 do{}while(0)
70#endif
71
72/* ========================================================================= *
73 * Prototypes
74 * ========================================================================= */
75
76/* ------------------------------------------------------------------------- *
77 * LOG
78 * ------------------------------------------------------------------------- */
79
80void log_emit_va (const char *file, const char *func, int line, int lev, const char *fmt, va_list va);
81void log_emit_real (const char *file, const char *func, int line, int lev, const char *fmt, ...) __attribute__((format(printf, 5, 6)));
82void log_debugf (const char *fmt, ...);
83int log_get_level (void);
84void log_set_level (int lev);
85bool log_p (int lev);
86int log_get_type (void);
87void log_set_type (int type);
88const char *log_get_name (void);
89void log_set_name (const char *name);
90void log_set_lineinfo(bool lineinfo);
91bool log_get_lineinfo(void);
92void log_init (void);
93
94/* ========================================================================= *
95 * Macros
96 * ========================================================================= */
97
98# define log_emit(LEV, FMT, ARGS...) do {\
99 if( log_p(LEV) ) {\
100 log_emit_real(__FILE__,__FUNCTION__,__LINE__, LEV, FMT, ##ARGS);\
101 }\
102} while(0)
103
104# define log_crit( FMT, ARGS...) log_emit(LOG_CRIT, FMT, ##ARGS)
105# define log_err( FMT, ARGS...) log_emit(LOG_ERR, FMT, ##ARGS)
106# define log_warning( FMT, ARGS...) log_emit(LOG_WARNING, FMT, ##ARGS)
107
108# if LOG_ENABLE_DEBUG
109# define log_notice( FMT, ARGS...) log_emit(LOG_NOTICE, FMT, ##ARGS)
110# define log_info( FMT, ARGS...) log_emit(LOG_INFO, FMT, ##ARGS)
111# define log_debug( FMT, ARGS...) log_emit(LOG_DEBUG, FMT, ##ARGS)
112# else
113# define log_notice( FMT, ARGS...) do{}while(0)
114# define log_info( FMT, ARGS...) do{}while(0)
115# define log_debug( FMT, ARGS...) do{}while(0)
116
117# define log_debugf( FMT, ARGS...) do{}while(0)
118# endif
119
120#endif /* USB_MODED_LOG_H_ */
int log_get_type(void)
void log_init(void)
bool log_get_lineinfo(void)
void log_emit_real(const char *file, const char *func, int line, int lev, const char *fmt,...)
void log_set_level(int lev)
void log_set_name(const char *name)
int log_get_level(void)
void log_set_lineinfo(bool lineinfo)
const char * log_get_name(void)
bool log_p(int lev)
void log_emit_va(const char *file, const char *func, int line, int lev, const char *fmt, va_list va)