Libecoli  0.10.1
Extensible COmmand LIne library
log.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
3  */
4 
18 #pragma once
19 
20 #include <stdarg.h>
21 #include <sys/queue.h>
22 #include <syslog.h>
23 
24 #include <ecoli/assert.h>
25 
30  EC_LOG_ERR = 3,
35 };
36 
42 struct ec_log_type {
43  TAILQ_ENTRY(ec_log_type) next;
44  const char *name;
45  enum ec_log_level level;
46  int id;
47 };
48 
66 #define EC_LOG_TYPE_REGISTER(name) \
67  static struct ec_log_type name##_log_type = { \
68  .n##ame = #name, \
69  }; \
70  static int ec_log_local_type; \
71  __attribute__((constructor, used)) static void ec_log_register_##name(void) \
72  { \
73  ec_log_local_type = ec_log_type_register(&name##_log_type); \
74  ec_assert_print(ec_log_local_type >= 0, "cannot register log type.\n"); \
75  }
76 
95 typedef int (*ec_log_t)(int type, enum ec_log_level level, void *opaque, const char *str);
96 
108 int ec_log_fct_register(ec_log_t usr_log, void *opaque);
109 
124 
134 const char *ec_log_name(int type);
135 
148 int ec_log(int type, enum ec_log_level level, const char *format, ...)
149  __attribute__((format(__printf__, 3, 4)));
150 
165 int ec_vlog(int type, enum ec_log_level level, const char *format, va_list ap);
166 
181 #define EC_LOG(level, args...) ec_log(ec_log_local_type, level, args)
182 
199 #define EC_VLOG(level, fmt, ap) ec_vlog(ec_log_local_type, level, fmt, ap)
200 
219 int ec_log_default_cb(int type, enum ec_log_level level, void *opaque, const char *str);
220 
236 
247 enum ec_log_level ec_log_level_get(void);
248 
int(* ec_log_t)(int type, enum ec_log_level level, void *opaque, const char *str)
Definition: log.h:95
int ec_log_level_set(enum ec_log_level level)
int ec_log_fct_register(ec_log_t usr_log, void *opaque)
int ec_log_default_cb(int type, enum ec_log_level level, void *opaque, const char *str)
const char * ec_log_name(int type)
int ec_log(int type, enum ec_log_level level, const char *format,...) __attribute__((format(__printf__
ec_log_level
Definition: log.h:26
int int ec_vlog(int type, enum ec_log_level level, const char *format, va_list ap)
int ec_log_type_register(struct ec_log_type *type)
enum ec_log_level ec_log_level_get(void)
@ EC_LOG_EMERG
Definition: log.h:27
@ EC_LOG_ALERT
Definition: log.h:28
@ EC_LOG_CRIT
Definition: log.h:29
@ EC_LOG_INFO
Definition: log.h:33
@ EC_LOG_WARNING
Definition: log.h:31
@ EC_LOG_NOTICE
Definition: log.h:32
@ EC_LOG_ERR
Definition: log.h:30
@ EC_LOG_DEBUG
Definition: log.h:34
enum ec_log_level level
Definition: log.h:45
int id
Definition: log.h:46