#include <vppinfra/types.h>
-#define foreach_vlib_log_level \
- _(0, EMERG, emerg) \
- _(1, ALERT, alert) \
- _(2, CRIT, crit) \
- _(3, ERR, error) \
- _(4, WARNING, warn) \
- _(5, NOTICE, notice) \
- _(6, INFO, info) \
- _(7, DEBUG, debug) \
- _(8, DISABLED, disabled)
+#define foreach_vlib_log_level \
+ _(EMERG, emerg) \
+ _(ALERT, alert) \
+ _(CRIT, crit) \
+ _(ERR, error) \
+ _(WARNING, warn) \
+ _(NOTICE, notice) \
+ _(INFO, info) \
+ _(DEBUG, debug) \
+ _(DISABLED, disabled)
typedef enum
{
-#define _(n,uc,lc) VLIB_LOG_LEVEL_##uc = n,
+ VLIB_LOG_LEVEL_UNKNOWN = 0,
+#define _(uc,lc) VLIB_LOG_LEVEL_##uc,
foreach_vlib_log_level
#undef _
+ VLIB_LOG_N_LEVELS,
} vlib_log_level_t;
typedef struct
char *name;
} vlib_log_class_config_t;
+
+typedef struct vlib_log_registration
+{
+ char *class_name;
+ char *subclass_name;
+ vlib_log_class_t class;
+ vlib_log_level_t default_level;
+ vlib_log_level_t default_syslog_level;
+
+ /* next */
+ struct vlib_log_registration *next;
+} vlib_log_class_registration_t;
+
typedef struct
{
vlib_log_entry_t *entries;
vlib_log_class_data_t *classes;
int size, next, count;
- /* our own log class */
- vlib_log_class_t log_class;
-
int default_rate_limit;
int default_log_level;
int default_syslog_log_level;
/* config */
vlib_log_class_config_t *configs;
uword *config_index_by_name;
+ int add_to_elog;
+
+ /* registrations */
+ vlib_log_class_registration_t *registrations;
} vlib_log_main_t;
extern vlib_log_main_t log_main;
#define vlib_log_info(...) vlib_log(VLIB_LOG_LEVEL_INFO, __VA_ARGS__)
#define vlib_log_debug(...) vlib_log(VLIB_LOG_LEVEL_DEBUG, __VA_ARGS__)
+#define VLIB_REGISTER_LOG_CLASS(x,...) \
+__VA_ARGS__ vlib_log_class_registration_t x; \
+static void __clib_constructor \
+__vlib_add_log_registration_##x (void) \
+ { \
+ vlib_log_main_t * lm = &log_main; \
+ x.next = lm->registrations; \
+ x.class = ~0; \
+ lm->registrations = &x; \
+ } \
+__VA_ARGS__ vlib_log_class_registration_t x
+
#endif /* included_vlib_log_h */
/*