00001
00002
00003
00004
00005 #ifndef _U_LOG_H_
00006 #define _U_LOG_H_
00007
00008 #include <u/libu_conf.h>
00009
00010 #include <stdlib.h>
00011 #include <stdarg.h>
00012 #include <stdio.h>
00013
00014 #include <u/missing.h>
00015 #include <u/toolbox/logprv.h>
00016
00017 #ifdef __cplusplus
00018 extern "C" {
00019 #endif
00020
00060
00061 enum { U_MAX_LOG_LENGTH = 1024 };
00062
00071 extern int facility;
00072
00074 typedef int (*u_log_hook_t)(void *arg, int level, const char *str);
00075
00077 typedef int (*u_log_lock_t)(void *arg);
00078
00080 typedef int (*u_log_unlock_t)(void *arg);
00081
00098 int u_log_set_lock(u_log_lock_t f, void *arg);
00099
00112 int u_log_set_unlock(u_log_unlock_t f, void *arg);
00113
00131 int u_log_set_hook(u_log_hook_t hook, void *arg, u_log_hook_t *old, void**parg);
00132
00143 #define u_log_die(ecode, facility, flags, err, ...) \
00144 do { \
00145 u_log_write(facility, LOG_CRIT, flags, err, __VA_ARGS__); \
00146 exit(ecode); \
00147 } while(0)
00148
00158 #define u_log_emerg(facility, flags, err, ...) \
00159 u_log_write(facility, LOG_EMERG, flags, err, __VA_ARGS__)
00160
00170 #define u_log_alert(facility, flags, err, ...) \
00171 u_log_write(facility, LOG_ALERT, flags, err, __VA_ARGS__)
00172
00182 #define u_log_critical(facility, flags, err, ...) \
00183 u_log_write(facility, LOG_CRIT, flags, err, __VA_ARGS__)
00184
00194 #define u_log_error(facility, flags, err, ...) \
00195 u_log_write(facility, LOG_ERR, flags, err, __VA_ARGS__)
00196
00206 #define u_log_warning(facility, flags, err, ...) \
00207 u_log_write(facility, LOG_WARNING, flags, err, __VA_ARGS__)
00208
00218 #define u_log_notice(facility, flags, err, ...) \
00219 u_log_write(facility, LOG_NOTICE, flags, err, __VA_ARGS__)
00220
00230 #define u_log_info(facility, flags, err, ...) \
00231 u_log_write(facility, LOG_INFO, flags, err, __VA_ARGS__)
00232
00242 #define u_log_debug(facility, flags, err, ...) \
00243 u_log_write(facility, LOG_DEBUG, flags, err, __VA_ARGS__)
00244
00246 #define die(ecode, ...) u_log_die(ecode, facility, 1, 0, __VA_ARGS__)
00247
00249 #define die_if(expr) if(expr) die(EXIT_FAILURE, #expr)
00250
00252 #define emerg_( err, ...) u_log_emerg(facility, 1, err, __VA_ARGS__)
00253
00255 #define alert_( err, ...) u_log_alert(facility, 1, err, __VA_ARGS__)
00256
00258 #define crit_( err, ...) u_log_critical(facility, 1, err, __VA_ARGS__)
00259
00261 #define err_( err, ...) u_log_error(facility, 1, err, __VA_ARGS__)
00262
00264 #define warn_( err, ...) u_log_warning(facility, 1, err, __VA_ARGS__)
00265
00267 #define notice_( err, ...) u_log_notice(facility, 1, err, __VA_ARGS__)
00268
00270 #define info_( err, ...) u_log_info(facility, 0, err, __VA_ARGS__)
00271
00273 #define dbg_( err, ...) u_log_debug(facility, 1, err, __VA_ARGS__)
00274
00276 #define con_( err, ...) u_console_write( err, __VA_ARGS__)
00277
00293 int u_strerror_r(int err, char *buf, size_t size);
00294
00299 #ifdef __cplusplus
00300 }
00301 #endif
00302
00303 #endif