#include <vlib/log.h>
#include <syslog.h>
-typedef struct
-{
- vlib_log_level_t level;
- vlib_log_class_t class;
- f64 timestamp;
- u8 *string;
-} vlib_log_entry_t;
-
-typedef struct
-{
- u32 index;
- u8 *name;
- // level of log messages kept for this subclass
- vlib_log_level_t level;
- // level of log messages sent to syslog for this subclass
- vlib_log_level_t syslog_level;
- // flag saying whether this subclass is logged to syslog
- f64 last_event_timestamp;
- int last_sec_count;
- int is_throttling;
- int rate_limit;
-} vlib_log_subclass_data_t;
-
-typedef struct
-{
- u32 index;
- u8 *name;
- vlib_log_subclass_data_t *subclasses;
-} vlib_log_class_data_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;
- int unthrottle_time;
- u32 indent;
-
- /* time zero */
- struct timeval time_zero_timeval;
- f64 time_zero;
-
-} vlib_log_main_t;
-
vlib_log_main_t log_main = {
.default_log_level = VLIB_LOG_LEVEL_NOTICE,
.default_syslog_log_level = VLIB_LOG_LEVEL_WARNING,
.default_rate_limit = 50,
};
-static int
+int
last_log_entry ()
{
vlib_log_main_t *lm = &log_main;
vlib_log_class_data_t *tmp;
vec_foreach (tmp, lm->classes)
{
+ if (vec_len (tmp->name) != strlen (class))
+ continue;
if (!memcmp (class, tmp->name, vec_len (tmp->name)))
{
c = tmp;
vlib_cli_output (vm, "%-22s %-14s %-14s %s",
"Class/Subclass", "Level", "Syslog Level", "Rate Limit");
+
+ u8 *defstr = format (0, "default");
vec_foreach (c, lm->classes)
{
- vlib_cli_output (vm, "%s", c->name);
+ vlib_cli_output (vm, "%v", c->name);
vec_foreach (sc, c->subclasses)
{
- vlib_cli_output (vm, " %-20s %-14U %-14U %d",
- sc->name ? (char *) sc->name : "default",
+ vlib_cli_output (vm, " %-20v %-14U %-14U %d",
+ sc->name ? sc->name : defstr,
format_vlib_log_level, sc->level,
format_vlib_log_level, sc->syslog_level,
sc->rate_limit);
}
}
+ vec_free (defstr);
return error;
}
/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_test_log, static) = {
.path = "test log",
- .short_help = "test log <class> <subclass> <level> <message",
+ .short_help = "test log <level> <class> <subclass> <message>",
.function = test_log_class_subclass,
};
/* *INDENT-ON* */